列表解析即與函式工具(map和filter)有關,又與迴圈有關,
python的迭代也包括使用者定義的類,
列表解析把任意乙個表示式而不是乙個函式用於乙個迭代物件中的元素,
列表解析與map:
ord('s')
#115
列表解析在乙個序列的值上應用乙個任意表示式,將其結果收集到乙個新的列表並返回,
[x ** 2 for x in range(10)]
list(map(lamdax:x ** 2),range(10)))
這樣比列表解析編寫更少的**,只是稍微複雜了點,但是對於更高階的表示式,
列表解析會被認為是輸入較少的。
1.增加測試和巢狀迴圈
列表解析甚至要比現在所介紹的更通用,可以在for之後編寫乙個if分支,用來增加選擇邏輯,使用了if
分支的列表解析能夠當成一種與上一部分討論的內建filter類似的工具,他們會在分支不是真的情況下跳過一些序列的元素。
[x for x in range(5) if x % 2 == 0]
list(filter((lamda x:x % 2 == 0),range(5)))
在列表解析中能夠混合乙個if分支以及任意的表示式,從而賦予它通過單個表示式,完成了filter和乙個map相同的功能。
再者:[x ** 2 for x in range(10) if x % 2 == 0]
list(map(lamda x:x ** 2),filter(lamda x:x % 2 == 0,range(10)))
實際上列表解析還能更加通用,你可以在列表解析中編寫任意數量的巢狀的for迴圈,並且每乙個都有可選的關聯if測試,
通用的列表解析的結構如下:
[expression for target1 in iterable1 [if condition1]
for target2 in iterable2 [if condition2]
for targetn in iterable2n [if conditionn]
]for分句巢狀在列表解析中,他們工作起來就像等效的巢狀的for迴圈語句。如下語句:
儘管列表解析建立了列表,記住他們能夠像任意的序列和其他迭代型別一樣進行迭代,
在這裡有乙個小技巧:
能夠不使用列表的數字索引遍歷字串,並收集他們合併後的結果:
[x + y for x in 'spam' for y in 'spam']
複雜的列表解析,總是可以將列表解析的for和if分句在其中進行巢狀,得到等效的語句。
map和filter等效的形式將會更複雜,會有深層的巢狀。
python列表解析
列表解析是乙個列表對映出另乙個列表,它的基本形式是乙個方括號裡面包含乙個for語句對乙個iterable物件迭代 expression for target1 in iterable1 if condition1 for targetn in iterablen if conditionn 上面是列...
python 列表解析
m 1,2,3 4,5,6 7,8,9 col2 row 1 for row in m 獲取列表m的每個元素的第二個元素的值組成的列表 print col2 print row 1 1 for row in m 獲取列表m的每個元素的第二個元素 1的值組成的列表 print row 1 for ro...
Python列表解析
語法 1.expression for iter val in iterable 2.expression for iter val in iterable if cond expr l i 2 for i in range 1,11 print l 1,4,9,16,25,36,49,64,81,...