本文阅读需要1小时。
----列表是python最重要的,几乎所有语言都要使用列表。-
本文将列表可能存在或使用的情况,我能想到的都列出来了。
注:本文用☆表示较难,初学者做了解即可。
一、列表可以存放什么:
字符串,浮点数(小数),整型数,例如:list列表
也可存放:元组、列表、字典。例如:a列表
list=[‘spam’, ‘汉语’, 3.14,2021]
a = [(20.21, ‘age’), [,‘name’, 2021], {‘键’: ‘值’}]
注意:列表长度有限制:
32位python的限制是 536870912 个元素
64位python的限制是 1152921504606846975 个元素
二、对列表有哪些操作:
L=[123,‘ABC’,3.14,{}]
列表索引:123是0,ABC是1, 3.14索引是2。
列表的索引从0开始的。
列表最后一个索引是-1,倒数第二索引-2
操作 | 解释 |
---|---|
L=[ ] | 一个空列表 |
L=[123,‘ABC’,3.14,{}] | 索引,列表第一个数据索引是0 |
L=[‘mane’,21,[‘dev’,‘age’]] | 列表嵌套,列表内有[‘dev’,‘age’] |
L=list(‘aBc9’) | 可迭代:print(L)[‘a’, ‘B’, ‘c’, ‘9’] |
L[i] | 索引:i是列表的索引,如:1 |
L[i][j] | 索引的索引(见下面代码) |
L[i:j] | 切片(取用列表一部分数据) |
len(L) | 显示列表长度 |
L1+L2 | 列表拼接 |
L*2 | 重复列表 |
常用操作
操作 | 解释 |
---|---|
L.append(2) | 在列表尾部添加2,或者其他 |
L=[123,‘ABC’,3.14,{}] | 索引,列表第一个数据索引是0 |
L.extend([5,6,7]) | 尾部扩展 |
L.insert(i,x) | 插入 |
L.count(x) | 统计元素出现次数 |
L[i]=3 | 索引赋值 |
L.remove(y) | 删除元素y |
L.copy() | 复制列表 python3.3以上可用 |
L.clear | 清除列表 3.3以上可用 |
列表解包 | for i in L:print(L) |
以上解释:L是列表可以自己设定。L=[1,2,3,‘a’,‘张’],i是列表索引。
1、索引示范如下:
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(L[1][2])
print(L[1][1:2])
运行结果:
6
[5,6]
[1, 2, 3]索引是0,[4, 5, 6]索引是1
第1个print含义:选择[4, 5, 6]中的最后一个数字的索引 2
第2个print含义:选择[4, 5, 6]中的索引1-2数据。[1:2]就是切片,选取了列表[4, 5, 6]的一部分打印。
2、下面介绍分片步长:↓
box=[0,1,2,3,4,5,6,7,8,9]
s=box[1:8:2]
print(s)
结果:
[1, 3, 5, 7]
[1:8:2]索引从1-8,以2的步长提取数据(1-3,走了2步),2就是步长。
3、列表排序(整理列表)
列表整理很重要,我们实践中遇到的数据99%是乱序的,比如身高,分数,年龄,工资等等。整理列表是所有编程语言都会用到的。
(1)列表反转↓
M=['A','B','C','D']
X='0123456789'
print(M[::-1])
print(X[5:1:-1])
结果:
['D', 'C', 'B', 'A']
5432
反转例2
例:1
h=['aa','bb','cc']
h.sort(reverse=False)
print(h)
h.sort(reverse=True)
print(h)
结果:
['aa', 'bb', 'cc']
['cc', 'bb', 'aa']
例 2:如下
k=['aa','bb','cc']
k.reverse()
print(k)
k.sort()
print(k)
结果
['cc', 'bb', 'aa']
['aa', 'bb', 'cc']
对上面的解释:列表反转方法很多,sort,reverse单独使用,也可以组合使用。
(3)根据长度排序↓
按照元素长度排序。
king = ['abc', 'HHHH', 'ffffffff', '康熙']
king.sort(key=len)
print(king)
结果:
['康熙', 'abc', 'HHHH', 'ffffffff']
4、列表弹出 ↓(用途较多)
M=['A','B','5','D']
x=M.pop(2)
print(M)
print(x)
结果:
['A', 'B', 'D']
5
运行讲解:pop是将M列表的第2索引拿出去,并不是删除(是取出,可再使用)
第二个print,打印被取出的5。实际应用中可以将这个x(即5)可以放入其他列表中:例如用append添加到列表尾部。
三、列表其他用法:
列表推导☆☆☆
(以下文字需要有for循环、for嵌套基础。初学做了解即可)
1、常规列表推导。看代码做比较。
res=[x+y for x in [1,2,3] for y in [0,5,6]]
print(res)
结果:
[1, 6, 7, 2, 7, 8, 3, 8, 9]
res=[]
for x in [1,2,3]:
for y in [0, 5, 6]:
res.append(x+y)
print(res)
结果:
[1, 6, 7, 2, 7, 8, 3, 8, 9]
tgr=[x+y for x in 'ABC' for y in '123']
print(tgr)
结果:
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
看代码,做比较
res=list(map(str, "fsdf"))
print(res)
结果:
['f', 's', 'd', 'f']
res = []
for i in 'fsdf':
res.append(i)
print(res)
结果:
['f', 's', 'd', 'f']
以上2段代码结果,第一段代码运用的是列表推导。第二段是for循环。
str是后面参数的类型解释,如果后面是1234,可以是int。
——————————————————————________________________________________
L=[x+2 for x in range(5)]
print(L)
运行结果:
[2, 3, 4, 5, 6]
上面代码先运行for循环,每循环一次X的值都+2。0+2,1+2,2+2,3+2,4+2。
2、列表矩阵
打印矩阵
m=[['s',2,3,4],
[4,'p',6,7],
[7,8,'t',8],
[4,5,6,'h']]
x=[m[i][i] for i in range(len(m))]
print(x)
结果:
['s', 'p', 't', 'h']
3、map在列表推导的运用
1、map用法1↓
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b=list(map(sum,m))
print(b)
结果:
[6, 15, 24]
map在list内会强制它返回所有的值,sum是求和。类似range
2、map用法2↓
L2 = list(map((lambda x: x ** 2), range(5)))
print(L2)
运行结果:
[0, 1, 4, 9, 16]
3、map解包:
people=[('梅梅',35,'教师'),('老王',42,'电工')]
x=list(map((lambda age:age[1]),people))
k=[(name,job) for (name ,age, job) in people]
print(x)
print(k)
结果:
[35, 42]
[('梅梅', '教师'), ('老王', '电工')]
第一个print,把年龄从元组取出变成列表。
第二个print,看起并不算是解包。
注意:不要滥用列表推导,简单胜于复杂。刚刚开始学习,要尽量使用for循环编写代码。如果考虑速度,在某些特定环境下,列表推导运行速度快于for。代码还有为了让人们看懂的含义,当人们懂得你的代码,我们再根据需要修改成可以运行更快的方式。并不是所有列表推导都运行快。KISS原则(Keep it simple and stupid)——保持简单甚至愚蠢原则。
逐步补充,争取把这个写把所有列表形式都展现出来,这是愿望,但还未实现。先写到这,后期再补充。