09 Python 高階特性1(切片、迭代、列表生成式)
阿新 • • 發佈:2019-02-14
1 切片
對於取指定索引範圍的數,用迴圈麻煩,Python提供了切片(Slice)操作來簡化操作。
# 定義一個List
>>> arr=['zhangsan','lisi','wanger']
>>> arr
['zhangsan', 'lisi', 'wanger']
# 訪問arr前兩個元素
>>> arr[0:2]
['zhangsan', 'lisi']
# 0可以省略
>>> arr[:2]
['zhangsan', 'lisi']
# 獲取最後一個元素
>>> arr[-1:]
['wanger' ]
# 獲取倒數兩個元素
>>> arr[-2:]
['lisi', 'wanger']
# 建立一個List
>>> ll=list(range(50))
>>> ll
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
# [0,12)範圍內,每兩個取一個數
>>> ll[:12:2]
[0, 2, 4, 6, 8, 10]
# 所有數中,每6個取一個數
>>> ll[::6]
[0, 6, 12, 18, 24, 30, 36, 42, 48]
tuple和字串也可以使用切片操作。
2 迭代
如果給定一個list或tuple,可以通過for迴圈來遍歷,這種遍歷稱為迭代(Iteration)。
# 建立一個dict
>>> grade_map={'lisi':99,'zhangsan':94,'wanger':100}
>>> grade_map
{'lisi': 99, 'zhangsan' : 94, 'wanger': 100}
# 迭代操作,迭代 key
>>> for key in grade_map:
... print(key)
...
lisi
zhangsan
wanger
# 迭代操作,迭代 value
>>> for value in grade_map.values():
... print(value)
...
99
94
100
# 迭代 key&value
>>> for k,v in grade_map.items():
... print(k,':',v)
...
lisi : 99
zhangsan : 94
wanger : 100
1)如何判斷一個物件是否是可迭代的?
# 使用 collections模組的Iterable型別判斷:
>>> from collections import Iterable
>>> isinstance(grade_map,Iterable)
True
>>> isinstance('hello',Iterable)
True
>>> isinstance(123,Iterable)
False
2)對list實現類似Java那樣的下標迴圈
# 使用內建的enumerate函式,把一個list變成索引-元素對
>>> for i,value in enumerate(['a','b','c']):
... print(i,value)
...
0 a
1 b
2 c
3)在for迴圈中,同時引用兩個變數
>>> for x,y in [(1,1),(2,4),(2,7)]:
... print(x,y)
...
1 1
2 4
2 7
3 列表生成式
即 List Comprehensions,是Python內建的非常簡單卻強大的用來建立list的生成式。
# 生成list
>>> list(range(1,11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 列表生成式,生成[1,11)範圍內偶數的平方的列表
>>> [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']
# 使用列表生成式輸出grade_map的key-value對
>>> [k+'='+str(v) for k,v in grade_map.items()]
['lisi=99', 'zhangsan=94', 'wanger=100']