列表
列表是python的基础数据类型之? ,其他编程语?也有类似的数据类型. 比如JS中的数组, java中的数组等等. 它是以[ ]括起来, 每个元素?’ , '隔开,?且可以存放各种数据类型。
提示:以下是本篇文章正文内容,由小编进行网络整理,版权归原作者所有,如有侵权,请联系本人,本人会第一时间删除处理!
一、列表的创建
- 方法一:列表可以由圆括号括起、逗号分隔的一组值(元素)得到。
nlist = [1, 4, 9, 16, 25]
- 方法二:转化为列表
none_list = list()
str_list = list('Python')
l1 = list(range(10))
l2 = list(range(1, 8))
l3 = list(range(0, 30, 5))
l4 = list(range(0, 10, 3))
l5 = list(range(0))
l6 = list(range(1, 0))
- 方法三:列表推导式
slist = [i for i in range(1, 5)]
二、列表的索引和切片
squares = [1, 4, 9, 16, 25]
print(squares[0])
print(squares[-1])
print(squares[-3:])
print(squares[:-1])
print(squares[::2])
三、列表拼接(+)、重复拼接列表(*)
- 列表拼接:+
squares = [1, 4, 9, 16, 25]
print(squares + [36, 49, 64, 81, 100])
- 重复拼接列表:*
squares = [1, 4, 9, 16, 25]
print(squares*3)
四、计算列表长度:len()
squares = [1, 4, 9, 16, 25]
print(len(squares))
五、列表的的增删改查
5.1.增(增加)
s.append(x) s.insert(i, x) s.extend(t) 或 s += t
方法一:[start : end : step]:索引赋值
cubes = [1,8,27,64,125]
cubes[5:] = [1,2,3]
print(cubes)
方法二:append():追加末尾
cubes = [1,8,27,64,125]
cubes.append(216)
print(cubes)
方法三:inserter():指定位置插入
cubes = [1,8,27,64,125]
cubes.insert(1,124)
print(cubes)
方法四:extend():合并两个列表(在末尾添加)
cubes = [1,8,27,64,125]
cubes.extend([44,55,66])
print(cubes)
也可以如下,批量添加元素到末尾,其实extend()方法内部也是这样处理数据的:
l1 = ['a','b','c','d']
for i in [1,2,3,4]:
l1.append(i)
print(l1)
方法五:合并两个列表(s += t)
cubes = [1,8,27,64,125]
print(cubes+[1])
print(cubes+[2,3])
此方法,相当于方法四中for循环添加
5.2.删(删除)
del s[i:j] 和 del s[i:j:k] s.pop([i]) s.remove(x) s.clear()
方法一:删除元素:[start : end] = []
letters = ['a','b','c','d','e','f','g']
letters[2:5] = []
print(letters)
方法二:清空列表:[:]
letters = ['a','b','c','d','e','f','g']
letters[:] = []
print(letters)
方法三:删除末尾元素 pop()
letters = ['a','b','c','d','e','f','g']
letters.pop()
print(letters)
方法四:删除指定元素 pop(index)
letters = ['a','b','c','d','e','f','g']
letters.pop(0)
print(letters)
方法五:移除具体元素 remove()
letters = ['a','b','c','d','e','f','g']
letters.remove('g')
print(letters)
此方法,当移除的元素不存在时,程序会报错。
方法六:清空列表 clear()
letters = ['a','b','c','d','e','f','g']
letters.clear()
print(letters)
方法七:删除某个或多个元素:del list[index : end : step]
letters = ['a','b','c','d','e','f','g']
del letters[1]
print(letters)
del letters[0:2]
print(letters)
方法八:删除整个列表:del list
letters = ['a','b','c','d','e','f','g']
del letters
5.3.改(修改)
s[i] = x s[i:j] = t s[i:j:k] = t
方法一:修改单个元素(索引赋值)
letters = ['a','b','c','d','e','f','g']
letters[0] = 'A'
print(letters)
方法二:修改区间内的元素(切片赋值)
letters = ['a','b','c','d','e','f','g']
letters[2:5] = ['C','D','E']
print(letters)
注意:根据步长切片得到元素,一定要与待赋值元素个数一一对应:
letters = ['a','b','c','d','e','f','g']
letters[::2] = 'zzzz'
print(letters)
5.4.查(查询)
index():查找元素的下标
squares = [1,4,9,16,25]
index = squares.index(16)
print(index)
count():统计指定元素在列表出现的次数
letters = ['a','b','a','c','a','d','e']
num = letters.count('a')
print(num)
in,not in:查询是否存在于列表中
in : 在列表中,则返回Ture,否则是False not in : 不在列表中,则返回True,否则是False
c = [1,2,3,4,5,6,7]
isIn = 3 in c
print(isIn)
isNotIn = 99 not in c
print(isNotIn)
for循环、for迭代
lists = ['A','B','C','D','E','F']
print(lists[0])
for i in lists:
print(i)
六、复制列表
1.序列复制n次:s *= n
l1 = ['str1','str2'] * 3
print(l1)
2.切片赋值给新列表
letters = ['a', 'b', 'c', 'd', 'e', 'f']
new_list = letters[:]
print(new_list)
3.浅层复制:list.copy()
letters = ['a', 'b', 'c', 'd', 'e', 'f']
copy_list = letters.copy()
print(copy_list)
注意:浅层复制中,删除原列表或者副本,都只能对自身产生影响,不会因删除原列表而导致副本改变,或者删除副本而导致原列表改变。
4.深层复制:copy.deepcopy(x)
import copy
digits = [1, 2, 3, 4, 5, 6]
copy_digits = copy.deepcopy(digits)
print(copy_digits)
浅层与深层复制的区别仅与复合对象(即包含列表或类的实例等其他对象的对象)相关:
浅层复制 构造一个新的复合对象,然后(在尽可能的范围内)将原始对象中找到的对象的 引用 插入其中。
深层复制 构造一个新的复合对象,然后,递归地将在原始对象里找到的对象的 副本 插入其中。
深度复制操作通常存在两个问题, 而浅层复制操作并不存在这些问题:
递归对象 (直接或间接包含对自身引用的复合对象) 可能会导致递归循环。
由于深层复制会复制所有内容,因此可能会过多复制(例如本应该在副本之间共享的数据)。
七、队列与堆栈
1.队列:
l = []
l.append(111)
l.append(222)
l.append(333)
print(l)
print(l.pop(0))
print(l.pop(0))
print(l.pop(0))
l1 = ["Eric", "John", "Michael"]
l1.append('Terry')
l1.append('Graham')
print('入队后,队列的情况:',l1)
print(l1.pop(0),l1)
print(l1.pop(0),l1)
print(l1.pop(0),l1)
- 列表中有数据的队列操作,方法2(collections集合模块下的deque队列):
from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append('Terry')
queue.append('Graham')
print('入队后,队列的情况:',queue)
print(queue.popleft(),queue)
print(queue.popleft(),queue)
2.堆栈
l1 = []
l1.append(111)
l1.append(222)
l1.append(333)
l1.append(444)
print(l1)
print(l1.pop())
print(l1.pop())
print(l1.pop())
print(l1.pop())
八、压缩两个列表(了解)
zip([iterable, …]):返回元组列表
list1 = ["what", "I'm", "sorting", "by"]
list2 = ["something", "else", "to", "sort"]
pairs = zip(list1, list2)
for item in pairs:
print(item,end='\t')
输出结果:
('what', 'something') ("I'm", 'else') ('sorting', 'to') ('by', 'sort')
九、列表的推导式
1.前言:创建一个平方列表 不使用列表推导式,写法如下:
squares = []
for x in range(10):
squares.append(x ** 2)
print(squares)
2.列表推导式 求0-9的平方根:
squares = [x ** 2 for x in range(10)]
print(squares)
复杂的列表推导式: 快速创建嵌套列表
print([(x, x ** 2) for x in range(6)])
squares = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
print(squares)
也可以这样写:
combs = []
for x in [1, 2, 3]:
for y in [3, 1, 4]:
if x != y:
combs.append((x, y))
print(combs)
求平方、绝对值,去除所有负数?
vec = [-4, -2, 0, 2, 4]
print([x * 2 for x in vec])
print([x for x in vec if x >= 0])
print([abs(x) for x in vec])
去除列表中,字符串的空白:
freshfruit = [' banana', ' loganberry ', 'passion fruit ']
l1 = [item.strip() for item in freshfruit]
print(l1)
列表推导式可以使用复杂的表达式和嵌套函数:
from math import pi
print([str(round(pi, i)) for i in range(1, 6)])
十、嵌套列表、多维列表
1.嵌套列表和多维列表
a = ['a','b','c']
n = (1,2,3)
x = [a,n]
print(x)
嵌套列表的取值:
x = [['a', 'b', 'c'], [1, 2, 3]]
print(x[0])
print(x[1][1])
2.多维列表
2.1 例题(面试题)
lists = [[]] * 3
lists[0].append(3)
lists[1].append(4)
lists[2].append(5)
print(lists)
当修改任意一个元素,其它也会被修改: 原因:在于 [[]] 是一个包含了一个空列表的单元素列表,所以 [[]] * 3 结果中的三个元素都是对这一个空列表的引用。修改 lists 中的任何一个元素实际上都是对这一个空列表的修改。
lists = [[]] * 3
lists[0].append(3)
lists[1].append(4)
lists[2].append(5)
print(lists)
lists[1][1] = 10
print(lists)
实现修改其中一个元素,其它元素不修改的方法:
lists = [[] for i in range(3)]
print(lists)
lists[0].append(3)
lists[1].append(5)
lists[2].append(7)
print(lists)
lists = [[None]*2]*3
print(lists)
lists[0][0] = 5
print(lists)
A = [None]*3
for i in range(3):
A[i] = [None]*2
print(A)
A[1][1] = 7
print(A)
w,h = 2,3
B = [[None]*w for i in range(h)]
print(B)
B[1][1] = 7
print(B)
2.2 例题:下面这个3x4的矩阵,它由3个长度为4的列表组成:
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
print([row[0] for row in matrix])
sq = [[row[i] for row in matrix] for i in range(4)]
print(sq)
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])
print(transposed)
transposed = []
for i in range(4):
transposed_row = []
for row in matrix:
transposed_row.append(row[i])
transposed.append(transposed_row)
print(transposed)
l1 = list(zip(*matrix))
print(l1)
3.多维列表转换为一维列表
3.1 列表嵌套列表
vec = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
"""
for elem in vec:
for num in elem:
pass
"""
print([num for elem in vec for num in elem])
3.2 列表嵌套元组
lists = [("I'm", 'else'), ('by', 'sort'), ('sorting', 'to'), ('what', 'something')]
print([item for li in lists for item in li])
3.3 列表嵌套元组,只取元组第2个值
lists = [("I'm", 'else'), ('by', 'sort'), ('sorting', 'to'), ('what', 'something')]
result = [x[1] for x in lists]
print(result)
十一、排序
- [升序或者降序排序] list.sort(key=None, reverse=False)
- [反转列表中的元素] list.reverse()
1.升序排列:
对列表中的内容,根据函数中默认的key键进行升序排列
letters = ['g', 'c', 'a', 'f', 'd', 'b', 'e']
letters.sort()
print(letters)
2.降序排列:
对列表中的内容,根据函数中默认的key键进行降序排列
letters = ['g', 'c', 'a', 'f', 'd', 'b', 'e']
letters.sort(reverse=True)
print(letters)
3.反转列表:
letters = ['g', 'c', 'a', 'f', 'd', 'b', 'e']
letters.reverse()
print(letters)
|