python列表推導
1. python列表推導式
a=[[0,1],[2,3],[4,5],[6,7],[8,9]]
b=[[row[i]forrowina]foriinrange(2)]
c=[]
foriinrange(2):
x=[]
forrowina:
x.append(row[i])
c.append(x)
print(b)
print(c)
2. Python 嵌套的列表推導式怎麼理解的呢
5.1.4. 嵌套的列表推導式
列表解析中的第一個表達式可以是任何錶達式,包括列表解析。
考慮下面有三個長度為 4 的列表組成的 3x4 矩陣:
>>> matrix = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]
現在,如果你想交換行和列,可以用嵌套的列表推導式:
>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
像前面看到的,嵌套的列表推導式是對 for 後面的內容進行求值,所以上例就等價於:
>>> transposed = []
>>> for i in range(4):
... transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
反過來說,如下也是一樣的:
>>> transposed = []
>>> for i in range(4):
... # the following 3 lines implement the nested listcomp
... transposed_row = []
... for row in matrix:
... transposed_row.append(row[i])
... transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
在實際中,你應該更喜歡使用內置函數組成復雜流程語句。對此種情況 zip() 函數將會做的更好:
>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
3. 這個是哪裡出錯了 python的列表推導式
題主你好,
你的問題出在不了解列表推導的語法.
先說一下你寫的代碼問題出在哪, 因為列表推導是一種語法糖, 語法糖這東西我的理解就是代碼精簡式的寫法, 你可以簡單的理解為正常的寫法可能要10行, 用語法糖可能1行就搞定了. 優點是可以減少代碼量, 缺點也顯而易見,就是相對於常規寫法一開始學起來理解要困難一些.
列表推導寫法: n = [ j if j*5==10 ]
把你的這個1行的列表推導轉化為常規寫法要3行:
上面代碼就形成了一個完整的閉環了.
所以學習列表推導很關鍵的一點是題主能否在常規代碼與列表推導之間進行轉換, 如果可以的話,題主寫完列表推導後可以將其轉化為常規代碼去看, 如果常規代碼沒問題, 則列表推導自然也就是對的.
-----
擴展閱讀:
網頁鏈接該鏈接中有一些簡單的例子,裡面既給出了列表推導的寫法也給出了相對應的常規寫法,題主可以研究一下這二者是怎麼轉換的, 不難.
=====
希望可以幫到題主, 歡迎追問.
4. python列表推導式
為什麼不用列表推倒?
用for循環,字元串拼接,當然你要注意逗號要少一個
5. python列表推導式 怎麼用
列表推導式(list comprehension)是利用其他列表創建新列表(類似於數學術語中的集合推導式)的一種方法。它的工作方式類似於for循環,也很簡單:
[x*xforxinrange(10)]
#[0,1,4,9,16,25,36,49,64,81]
如果只想列印出那些能被3整除的平方數,只需要通過添加一個if部分在推導式中就可以完成:
[x*xforxinxrange(10)ifx%3==0]
#[0,9,36,81]
也可以增加更多的for語句的部分:
[(x,y)forxinrange(3)foryinrange(3)]
#[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
[[x,y]forxinrange(2)foryinrange(2)]
#[[0,0],[0,1],[1,0],[1,1]]