1. 程式人生 > >09 Python 高階特性1(切片、迭代、列表生成式)

09 Python 高階特性1(切片、迭代、列表生成式)

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']