03:列表 list
### 一.list的基本特性 1)任意对象的有序集合 2)通过索引访问下标元素 3)可变长度的 4)属于可变序列
二.list的基本属性
2.1使用len()全局函数计算list的长度
>>> str2 = 'HelloKitty'
>>> listA = list(str2)
>>> listA
['H', 'e', 'l', 'l', 'o', 'K', 'i', 't', 't', 'y']
>>> len(listA)
10
2.2使用+
连接list,产生新的list
需要注意的是,此时是产生新的列表,而之前的列表是不会改变的
[1,2,3] + ['a','b','c']
>>>[1, 2, 3, 'a', 'b', 'c']
2.3使用in
和not in
判断元素是否在列表中
# 使用in判断元素是否在列表里面
listA
['H', 'e', 'l', 'l', 'o', 'K', 'i', 't', 't', 'y']
'i' in listA
True
# 使用not in判断元素是否不在列表里面
'e' not in listA
False
2.4遍历列表中的元素
listA = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in listA:
print(i, end='|')
>>>1|2|3|4|5|6|7|8|9|10|
2.5列表的推导
如果要计算一个列表中的每个元素的平方,使用原始的方法如下:
listB = [1, 3, 5, 7, 9]
result = []
for i in listB:
result.append(i**2)
print(result)
结果:[1, 9, 25, 49, 81]
同时可以使用一个更简洁的列表的推导的方法:
listB = [1, 3, 5, 7, 9]
result = [i**2 for i in listB]
print(result)
结果:[1, 9, 25, 49, 81]
其中列表的推导中最为核心的语句是:result = [i**2 for i in listB]
其意义是将list B中的元素进行一个for遍历,然后将每个元素迭代进行平方的操作,最后返回一个列表到result
另外一个例子,将字符串中的字符串每个重复3次,然后返回
str1 = 'HelloKitty'
result = [c*3 for c in str1]
print(result)
结果:['HHH', 'eee', 'lll', 'lll', 'ooo', 'KKK', 'iii', 'ttt', 'ttt', 'yyy']
2.6 列表的切片和修改
可以对列表进行一个切片,并且赋值给其中的元素,注意赋值的是一个列表元素,且切片[a:b]中,b是开区间,未包括b
>>> b
b的原始值
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
通过索引访问
>>> b[0:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
-1代表最后一个元素,0到-1遍历,但是-1是开区间,所以不包括最后一元素
>>> b[0:-1]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> b[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b[-1:]
[9]
>>> b[-1:0]
[]
>>> b[11]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> b[:11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b[::1]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b[::2]
[0, 2, 4, 6, 8]
>>> b[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> b[::-2]
[9, 7, 5, 3, 1]
>>>
listA = [1, 2, 3, 4, 5, 6, 7, 8, 9]
listA[1:2] = [99,100,103]
print(listA)
结果:[1, 99, 100, 103, 3, 4, 5, 6, 7, 8, 9]
可以将某一段的元素都进行替换和改变
listA = [1, 2, 3, 4, 5, 6, 7, 8, 9]
listA[1:5] = [99]
print(listA)
结果:[1, 99, 6, 7, 8, 9]
列表和数字相乘,实现是返回一个列表,并且这个列表中的元素重复几次,但是这个列表本身没有改变
>>> listA = [1,2,3]
>>> listA*3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> listA
[1, 2, 3]
三.list的基本操作
3.1 追加一个元素到list的末尾,使用.append(object)方法
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> listA.append('hello')
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'hello']
如果追加多个元素,会抛出异常
listA.append(1,2,3,4)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: append() takes exactly one argument (4 given)
3.2 追加多个元素到末尾,使用.extend([])
方法
.append()方法只能追加一个元素到列表的末尾,.extend()也只能有一个参数,却可以实现追加可迭代对象,相当于两个列表的连接.
使用append()添加一个列表,会把列表直接作为一个元素添加到列表的末尾,extend()会将元素分别添加到列表
# 追加一个元组,实际上也是可以的
listA.extend((1,2,3,4))
listA
[1, 2, 3, 1, 2, 3, 4]
#追加一个列表
>>> listA = [1,2,3]
>>> listA.extend(['o','k'])
>>> listA
[1, 2, 3, 'o', 'k']
#使用append()添加一个列表,会把列表直接作为一个元素添加到列表的末尾
listA
[1, 2, 3, 1, 2, 3, 4]
listA.append(['l','k'])
listA
[1, 2, 3, 1, 2, 3, 4, ['l', 'k']]
3.3 对列表进行排序,.sort()和.sorted()
.sort()
方法直接对可变序列进行排序,会改变序列本身的值
sorted()
全局函数,不会改变序列,返回一个新的序列,sorted可以对所有的可迭代对象进行排序
扩展阅读:http://www.runoob.com/python/python-func-sorted.html
# 使用.sort()方法,会改变序列
>>> score
[15, 25, 0, 98, 1121654, 11, 2, 0]
>>> score.sort()
>>> score
[0, 0, 2, 11, 15, 25, 98, 1121654]
# 使用sorted()全局函数,不会改变序列
>>> sorted(score)
[0, 0, 2, 11, 15, 25, 98, 1121654]
>>> score
[15, 25, 0, 98, 1121654, 11, 2, 0]
排序的顺序可以通过reverse参数来进行定义,并且必须指明参数的名称
listA = [1,2,444,22,0,63]
listA.sort(reverse=True)
listA
[444, 63, 22, 2, 1, 0]
3.4 直接使用.reverse()方法来对list进行一个反转
listA
[444, 63, 22, 2, 1, 0]
listA.reverse()
listA
[0, 1, 2, 22, 63, 444]
3.5 直接使用.pop()方法弹出并且返回元素,此时元素从列表中删除
listA
[1, 2, 22, 63, 444]
listA.pop(3)
63
listA
[1, 2, 22, 444]
3.6使用全局的del()
操作符删除元素
>>> listA
[1, 2, 22, 444]
>>> del(listA[2])
>>> listA
[1, 2, 444]
3.7使用.index()检索某一个值的下标
>>> listA
[1, 2, 444]
>>> listA.index(444)
2
>>> listA.index(55)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: 55 is not in list
3.8使用.count()统计某一个元素出现的次数
>>> listA
[1, 2, 444, 1, 22, 33, 44, 1, 2, 1, 2, 12]
>>> listA.count(22)
1
>>> listA.count(2)
3
四.list的引用和拷贝副本
共享引用导致修改一个,另外一个变量的引用也跟着改变了
>>> listA = [1,2,3,4,5]
# listB和listA为共享引用
>>> listB = listA
>>> listA
[1, 2, 3, 4, 5]
>>> listB
[1, 2, 3, 4, 5]
>>> listA[2]=55
>>> listA
[1, 2, 55, 4, 5]
>>> listB
[1, 2, 55, 4, 5]
# 修改了listA的值,也导致listB共享引用的值也变化了
可以使用list的拷贝(但是如果list的内容太多,会耗时太久)
>>> listA
[1, 2, 3, 4, 5]
# 在这里使用了list的拷贝,传递的是一个副本
>>> listB = listA[:]
>>> listA
[1, 2, 3, 4, 5]
>>> listB
[1, 2, 3, 4, 5]
>>> listA[2]=99
>>> listA
[1, 2, 99, 4, 5]
>>> listB
[1, 2, 3, 4, 5]
同样也可以list的copy方法进行
>>> listA = [1,2,3,4,5]
# 使用了list的copy方法
>>> listB = listA.copy()
>>> listA[2]=99
>>> listA
[1, 2, 99, 4, 5]
>>> listB
[1, 2, 3, 4, 5]
这里涉及到深拷贝和浅拷贝,可以参考博文内容。
五list的其他常用方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步