列表是内置可变序列,是包含多个元素的有序连续的内存空间,可以存储任意数目、任意类型的数据集合,列表不可以作为字典的键。
目录
一、列表的创建
①[]创建
a=[]
②list()创建
用list()可将任何可迭代数据转化成列表
a=list()
③range()创建整数列表
Python3中range返回的是range对象,可以用list来将range创建的range对象转化为整数列表对象
a=list(range(10))
print(a)
#结果为:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
④推导式生成列表
列表推导式的方括号内包含以下内容:一个表达式,后面为一个 for
子句,然后,是零个或多个 for
或 if
子句。结果是由表达式依据 for
和 if
子句求值计算而得出一个新列表(通过if过滤元素)
'''
a=[]
for i in range(10):
a.append(i**2)
print(a)
'''
a = [i**2 for i in range(10)]
print(a)
生成0-9的平方的列表
'''
a = []
for x in [1,2,3]:
for y in [3,1,4]:
if x != y:
a.append((x, y))
print(a)
'''
a=[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
print(a)
生成x!=y的列表
二、列表元素的增加
①append()方法
原地修改列表对象,是真正的列表尾部添加新的元素,速度最快,相当于a[len(a):] = [x]
a.append(x)
②+运算符操作
并不是真正的尾部添加元素,而是创建新的列表对象;将原列表的元素和新列表的元素依次复制到新的列表对象中,会涉及大量的复制操作。
③extend()方法
将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象。用可迭代对象的元素扩展列表,相当于 a[len(a):] = iterable 。在list列表末尾一次性追加iterable序列中的多个值(用新列表扩展原来的列表)
a.extend(iterable)
④insert()插入元素
list.insert(i, x)
在指定位置插入元素。第一个参数是插入元素的索引
因此,a.insert(0, x) 在列表开头插入元素, a.insert(len(a), x) 等同于 a.append(x)
⑤乘法扩展
使用乘法扩展列表,生成一个新列表,新列表元素时原列表元素的多次重复
三、列表元素的删除
①del删除
删除列表指定位置的元素,涉及数组的拷贝
②pop()方法
list.pop(i)
删除列表中指定位置的元素,并返回被删除的元素
未指定位置时,a.pop() 删除并返回列表的最后一个元素
③remove()方法
list.remove(x)
从列表中删除第一个值为 x 的元素
四、成员资格的判断
判断列表中是否存在指定的元素,我们可以使用count()方法,返回0则表示不存在,返回大于0则表示存在。但是,一般我们会使用更加简洁的in关键字来判断,直接返回True或False。
五、切片操作(slice操作)
切片slice操作可以让我们快速提取子列表或修改。
a[start:end:step]
对a切片出start到end-1,每次间隔step的子列表,切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。
六、列表的遍历
通过for循环来进行列表的遍历
a=[1,2,3,4,5,6]
for i in a:
print(i)
'''
结果为:
1
2
3
4
5
6
'''
七、列表的复制
切片操作返回包含请求元素的新列表(b=a[:]是将a复制给b(浅拷贝/不完全复制),如果用b=a,相当于b是a的别名,更改b的同时也会更改a)。
浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。列表里的子对象仍然指向统一对象
b = a.copy()
深度拷贝:copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
import copy
b=copy.deepcopy(a)
八、列表排序
①修改原列表,不建新列表的排序
list.sort(key=None, reverse=False)
key -- 指定可迭代对象中的一个元素来进行排序,需要写一个函数进行
def takeSecond(q):
return q[1]
list = [(2, 2), (3, 4), (4, 1), (1, 3)]
list.sort(key=takeSecond)
print(list)
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)
②建立新列表的排序
用内置函数sorted()
a=[7,6,5,4,3,2,1]
a=sorted(a)
print(a)
a=sorted(a,reverse=True)
print(a)
'''
结果为:
[1, 2, 3, 4, 5, 6, 7]
[7, 6, 5, 4, 3, 2, 1]
'''
九、reversed()返回迭代器
内置函数reversed()也支持进行逆序排列,与列表对象reverse()方法不同的是,内置函数reversed()不对原列表做任何修改,只是返回一个逆序排列的迭代器对象。
a=[7,6,5,4,3,2,1]
a=reversed(a)
print(a)
print(list(a))
'''
结果为:
<list_reverseiterator object at 0x0000022759D401C0>
[1, 2, 3, 4, 5, 6, 7]
'''
十、二维列表书写格式
a=[
[],
[],
[]
]
十一、列表其他常用操作
max(list)
返回列表的最大值
min(list)
返回列表的最小值
sum(list)
返回列表的元素和
list.clear()
删除列表里的所有元素,相当于 del a[:] 。
list.index(x,start,end)
在list的start到end之间查找x,返回列表中第一次出现x的位置
list.count(x)
返回列表中元素 x 出现的次数
list.reverse()
翻转列表中的元素
len(list)
返回列表长度