切片
取list或tuple的部分元素非常常见
eg:取列表的前三个元素
L = ['one','two','three','four','five']
r = []
n = 3
for i in range(n):
r.append(L[i])
['one','two','three']
上诉方法虽然可以实现,但是对于经常性的操作,显然比较繁琐,所以Python提供了切片(Slice)操作以简化操作。
L[0:3]
['one','two','three']
L[0:3]表示从索引0开始到3,不包括3,如果从0开始可以省略第一个参数,所有数可以省略第二个参数,也可以从其他索引开始,也可以从后开始,也可以加第三个参数表示每几个数取一个,也可以操作tuple,字符串。
L = list(range(100))
#取前十个数
L[:10]
[0,1,2,3,4,5,6,7,8,9]
#后10个数
L[-10:]
[90,91,92,93,94,95,96,97,98,99]
#前11到20共10个数
L[10:21]
[11,12,13,14,15,16,17,18,19,20]
#前10个数每俩个取一个
L[:10:2]
[0,2,4,6,8]
#所有数,每5个取一个
L[::5]
[0,5,19,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95]
#处理tuple
(1,2,3,4,5)[:3]
(0,1,2)
#处理字符串
'ABCDEFG'[:3]
'ABC'
'ABCDEFG'[::2]
'ACEG'
这样一行代码就可以实现很多循环完成的操作啦。
迭代
对于一个list或tuple我们通过for循环来遍历,这种遍历就叫做迭代
#dict默认迭代key
for key in dict
#迭代value
for value in d.values()
#迭代key和value
for k,v in d.items()
#迭代字符串
for ch in 'abc':
print(ch)
a
b
c
判别对象是否可迭代
from collections import Iterable
isinstance('abc',Iterable)
Ture #字符串可迭代
isinstance(123,Iterable)
False #整数不可迭代
isinstance([1,2,3],Iterable)
Ture #list可迭代
Python内置的enumerate函数可以把list变成索引-元素对所示现同时迭代索引和元素本身
for i,value in enumerate(['A','B','C']):
print(i,value)
0 A
1 B
2 C
同时引用俩个变量
for x,y in[(1,1),(2,4),(3,9)]:
print(x,y)
1 1
2 4
3 9
列表生成
#循环
[x*x for x in range(1,11)]
[1,4,9,16,25,36,49,64,81,100]
#判断
[x*x for x in range(1,11) if x % 2 == 0]
[4,16,36,64,100]
#生成全排列
[m+n for m in 'ABC' for n in 'XYZ']
['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']
#用dict生成list
d = {'x':'A','y':'B','z':'C'}
[k+'='+v for k,v in d.items()]:
['y=B','x=C','z=D']
#将list中变成小写
L = ['Apple','IBM']
[s.lower() for s in L]
['apple',ibm]
网友评论