python List 常用方法
list 是 python 常用的数据类型,属于可变的数据类型。用 []
表示,里面的元素用 ,
隔开,并且里面的元素类型可以不同,对于每个元素,list 都有一个索引一一对应,第一个元素的索引是 0
,第二个是 1
,以此类推... 例如:list1 = [1,'name',['innerList'],(1,3)]
,这个 list1
包含了数字、字符串、列表、元组等不同类型的数据。
常见的声明:
names = ['A','B','C']
根据索引取值
列表的每个元素都有一个唯一的索引,代表了它在列表中的位置,索引从 0 开始
print(names[2]) # 字典的下标从0开始,2 代表第三个元素
切片
对列表获取某一部分内容,称为对列表进行切片,就像拿菜刀切了一截一样。我们根据索引进行切片,它有三个值来控制切片:
list[x:y:z] # list 是待切片的列表
x,y,z 这三个值不一定要同时出现,每个值都可以被忽略
- x:x 代表了切片的起始索引位置,是索引值。忽略该值,会默认从索引0开始取值。
- y:y 代表了切片的截至索引位置,获取的切片不包含这个索引处的值。忽略该值,默认截至到列表的末尾。
- z:z 代表了切片的步长。就是每隔 z-1 个元素取一次值,z 的默认值是 1
print(names[0:2]) # 取索引为0-2的元素,不包括2
print(names[0:]) # 取0到最后一个元素(冒号前后如果都为空,则默认代表开头和结尾)
print(names[:]) # 取所有元素
print(names[1:-1]) # 从1开始,取到最后一个元素(最后一个元素为-1,倒数第二个为-2,...)
print(names[1:-2]) # 从1开始,取到倒数第二个元素
print(names[::2]) # 从索引0开始,每次间隔 1 个元素(2-1)取一次值
深复制和浅复制
如果一个列表中嵌套了列表。当你对列表进行浅复制时,内部嵌套的列表其实是同一个对象,也就是只复制了表层的数据。深复制则会将内部嵌套的列表也复制一份。
from copy import copy,deepcopy
list1 = ['a','b',[1,2,3]] # list1,里面包含了一个list
list2 = copy(list1) # 浅复制一个 list2
list3 = deepcopy(list1) # 深复制一个 list3
list1[2].append(4) # 向 list1 嵌套的列表中添加一个元素4
list1.append('c') # 对 list1 添加元素 c
print(list2) # 浅复制的对象,虽然外层元素没有变化(没有多c),但是内部的 list 还是变化了(多了4),说明了内部的 list 还是共用的
print(list3) # 深复制的对象,外层和内层都没有变化,说明这是一个全新的对象
添加
append
方法用来向列表添加元素
names.append('D')
print(names)
插入
insert(索引,元素)
用来在索引位置插入元素
names.insert(1,'E')
print(names)
删除特定元素 A
remove
方法用来删除元素。
names.remove('A')
print(names)
另一种删除方法:
del names[-1]
print(names)
pop删除,默认弹出最后一个元素,并将这个元素存放在pop中
pop 也会删除元素,但是它有个返回值,返回值就是删除的内容。
pop = names.pop()
print('pop =',pop)
获取元素的索引
index
方法可以查找某个元素所在的索引位置
print(names.index('B'))
统计元素出现的次数
print(names.count('B'))
对列表进行翻转
reverse()
可以将列表首尾颠倒过来,倒转一下。
names.reverse()
print(names)
列表排序:reserve=True代表降序排列
list.sort
可以对列表进行排序。reverse
参数可以控制排序时用 升序
还是 降序
names.sort(reverse=True) # reverse=True 是降序
print(names)
注意:python 还有个
sorted
函数,可以返回一个新的排序后的对象,原始数据不会改变。list.sort
会将自身的顺序改变。
扩展list
extend
可以接收一个列表作为参数,并将其中的元素追加到自身中。
names2 = [1,2,3,4,5]
names.extend(names2)
print(names)
步长打印
print(names[0:-1:2])
列表生成器
在声明列表时,列表中可以接收一个简短的表达式,来动态的生成元素。
list1 = [x*3 for x in range(10)]
"""
等同于:
list1 = []
for x in range(10):
list1.append(x*3)
"""
list2 = [i if i % 2 == 0 else 0 for i in range(10)]
"""
等同于:
list2 = []
for i in range(10):
if i % 2 == 0:
list2.append(i)
else:
list2.append(0)
"""
list3 = [i for i in range(10) if i %2==0]
"""
等同于:
list3 = []
for i in range(10):
if i%2 == 0:
list3.append(i)
"""