Python 高级特性 1
切片
将L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
列表中前上个3个元素:
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
r = []
n = 3
for i in range(n):
r.append(L[i])
print(r)
运行:
['Michael', 'Sarah', 'Tracy']
使用循环,书写的代码量较多,我们可以使用切片的方式:
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
r = L[0:3]
print(r)
运行:
['Michael', 'Sarah', 'Tracy']
L[0:3]
表示:从索引0
开始取,直到索引3
为止,但不包括索引3
。
如果第一个索引是
0
,可以省略不写:r = L[:3]
注意:
L[-1]
取的是L
列表中的最后一个元素。
在来一个例子
先创建一个0-99的数列L = list(range(100))
。
我们在L
前10个元素中,每2个元素取一个:
>>> L[:10:2]
[0, 2, 4, 6, 8]
在L
中所有数,每5个取一个:
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
复制一个L
:
>>> L[:]
[0, 1, 2, 3, ..., 99]
tuple也是一种list,唯一区别是tuple不可变。所以tuple也可以进行切片操作。
同样的,字符串也可以切片。
>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'
注意:
Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
迭代
迭代就是:通过for
循环来遍历这个list或tuple。
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print(key, d[key])
运行输出:
b 2
c 3
a 1
注意:因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
迭代dict中的key和value,还可以这样写:for k, v in d.items()
迭代dict中的value,还可以这样写程序:for value in d.values()
迭代字符串,也是一样的:
>>> for ch in 'ABC':
... print(ch)
...
A
B
C
只要作用于一个可迭代对象,
for
循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。
问题就是如何判断一个对象是否是可迭代对象?
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
使用collections模块的
Iterable
类型判断。
介绍一个小技巧:Python里有一个函数,它可以将一个list变成索引-元素对的形式,这个函数就是enumerate
函数:
>>> for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C