在Python中,代碼不是越多越好,而是越少越好。代碼不是越複雜越好,而是越簡單越好。 java
切片: python
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] print L[0:3] # ['Michael', 'Sarah', 'Tracy']
同時能夠設置步長: 算法
L = range(100) print L[10:20:2] # 最後一個2表示每隔2隔取一個值 print L[::5] # 全部數每隔5隔取一個 print L[:] # 原樣複製一個list tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) #tuple也能夠切片 print tuple[:3] print 'ABCDEFG'[:3] # 字符串也能夠進行切片 print 'ABCDEFG'[::2]
迭代: app
在Python中,迭代是經過for ... in來完成的;當咱們使用for循環時,只要做用於一個可迭代對象,for循環就能夠正常運行,而咱們不太關心該對象到底是list仍是其餘數據類型;那麼,如何判斷一個對象是可迭代對象呢?方法是經過collections模塊的Iterable類型判斷: 函數
from collections import Iterable print isinstance('abc', Iterable) # True print isinstance([1, 2, 3], Iterable) # True print isinstance((1, 2, 3), Iterable) # True print isinstance({'java': 'diff', 'python': 'middle'}, Iterable) # True
for i, key in enumerate(['a', 'b', 'c']): print i,key 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
print [x*x for x in range(1, 11)] # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] print [x*x for x in range(1, 11) if x % 2 ==0] # [4, 16, 36, 64, 100],在list裏面能夠用if語句進行刷選 print [m+n for m in 'ABC' for n in 'XYZ'] # ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] L = ['Hello', 'World', 18, 'Apple', None] print [x.lower() if isinstance(x, str)else x for x in L ] # ['hello', 'world', 18, 'apple', None],在條件表達式中進行篩選
經過列表生成式,咱們能夠直接建立一個列表。可是,受到內存限制,列表容量確定是有限的。並且,建立一個包含100萬個元素的列表,不只佔用很大的存儲空間,若是咱們僅僅須要訪問前面幾個元素,那後面絕大多數元素佔用的空間都白白浪費了。 spa
因此,若是列表元素能夠按照某種算法推算出來,那咱們是否能夠在循環的過程當中不斷推算出後續的元素呢?這樣就沒必要建立完整的list,從而節省大量的空間。在Python中,這種一邊循環一邊計算的機制,稱爲生成器(Generator)。 code
建立L 和g 的區別僅在於最外層的[] 和() ,L 是一個list,而g 是一個generator。s = (x*x for x in range(1, 11)) print [m for m in s] # 經過for循環遍歷出generator的內容
def odd(): print 'step 1' yield 1 print 'step 2' yield 3 print 'step 3' yield 5 print odd() print [m for m in odd()]
<generator object odd at 0x0262D3A0> step 1 step 2 step 3 [1, 3, 5]