一、概念
列表是一种有序的集合,是一段连续的内存空间。列表是python序列中的一种,是一种基本的数据结构。列表和元祖不同,列表是可变序列。
二、创建
列表有四种创建方式:
- 使用一对方括号来表示空列表: []
- 使用方括号,其中的项以逗号分隔: [1, 2, ‘3’]
- 使用列表推导式: [x for x in iterable]
- 使用类型的构造器: list() 或 list(iterable)
>>> list1 = [];
[]
>>> list2 = [1,2,'3']
[1,2,'3']
>>> list3 = [i for i in range(1,4)]
[1,2,3]
>>> list4 = list()
[]
>>> list5 = list(range(1,4))
[1,2,3]
注:如果使用 list(iterable) 这种方式创建列表,而 iterable 是一个字典的话,得到的是字典的 键 的集合。
>>> list6 = list({'a':1,'b':2})
['a', 'b']
三、方法
列表实现了所有一般和可变序列的操作。
1、列表的常用方法:
方法 | 描述 |
---|---|
len(list) | 列表长度 |
[‘a’,‘b’] + [‘c’] | 两个列表组合为一个列表,结果为:[‘a’,‘b’,‘c’] |
[‘a’]*2 | 重复列表的元素组成一个新的列表结果:[‘a’,‘a’] |
‘a’ in [‘a’,‘b’,‘c’] | 判断a元素是否存在于[‘a’,‘b’,‘c’],结果:True |
max(list) | 返回列表元素最大值 |
max(list) | 返回列表元素最大值 |
list.append(x) | 在列表末尾添加元素x |
list.extend(iterable) | 用可迭代对象的元素扩展列表 |
list.insert(i,x) | 指定位置插入元素,第一个参数是索引 |
list.remove(x) | 从列表中删除第一个值为x的元素,未找到触发ValueError 异常。 |
list.pop([i]) | 删除列表的指定位置的元素,并返回被删除的元素,未指定位置则删除并返回列表的最后一个元素 |
list.clear() | 删除列表里的所有元素,相当于 del a[:] |
list.index(x[,start[,end]] | 返回列表中第一个值为 x 的元素的零基索引。未找到指定元素时,触发 ValueError 异常。可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数。 |
list.count(x) | 返回元素x出现的次数 |
list.sort(*, key=None, reverse=False) | 排序列表中的元素,接收仅限以关键字形式传入的两个参数,key指定带有一个参数的函数,reverse表示是否反向排序 |
list.reverse() | 反转列表中的元素 |
list.copy() | 返回回列表的浅拷贝。相当于 a[:] |
2、列表推导式:
列表推导式在逻辑上相当于一个循环,只是形式上更加简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。
[表达式 for 变量 in 序列或迭代对象 判断条件]
比如,创建一个平方列表:
# 直接用 for 循环,
>>> squs = [];
>>> for i in range(0,10):
squs.append(i**2)
>>> squs
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 这二种方式会有一个副作用,循环结束之后 i 还在
>>> i
9
# 使用构造器加 map 函数和 lambda 也可以完成
>>> squs = list(map(lambda x: x**2, range(10)))
>>> squs
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 使用列表推导式
>>> squs = [x**2 for x in range(10)
>>> squs
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81
可以看到使用列表推导式是最简洁的。
列表推导式可以添加判断,如下:
# 使用如下方式得到0-9(包含9)的正整数里面3的倍数的数字的平方的集合
>>> l = [i**2 for i in range(10) if i % 3 == 0]
>>> l
[0, 9, 36, 81]
和 for 循环一样,列表推导式也可以多层循环:
>>> l = [x*y for x in ['a', 'b', 'c'] for y in [1, 2, 3]]
>>> l
['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'c', 'cc', 'ccc']
等价于:
>>> l = []
>>> for x in ['a', 'b', 'c']:
for y in [1, 2, 3]:
l.append(x*y)
>>> l
['a', 'aa', 'aaa', 'b', 'bb', 'bbb', 'c', 'cc', 'ccc']
因为列表推导式中的初始表达式可以是任何表达式,甚至可以是另一个列表推导式。所以列表推导式还可以嵌套使用。
例如:
# 转置行列
>>> l = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> result = [[v[i] for v in l] for i in range(4)]
>>> result
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]
等价于:
>>> result = [[v[0] for v in l],[v[1] for v in l],[v[2] for v in l],[v[3] for v in l]]
>>> result
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]
也等价于:
>>> result = []
>>> for i in range(4):
result.append([v[i] for v in l])
>>> result
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]
总之,列表推导式是个好东西啊。
四、后记
上面都是我对python列表的一些理解,本人也是初学python,如果有什么不对的地方希望大家指正。谢谢_!!!