簡體   English   中英

在 Python 中將列表推導式轉換為 For 循環

[英]Converting List Comprehensions to For Loops in Python

我了解列表推導式的重要性,但不了解它們的內部工作原理,因此無法用更簡單的術語(例如 for 循環)來理解它們。 例如,我如何將其更改為 for 循環:

li = [row[index] for row in outer_list]

在這個例子中,我有一個列表列表,為了我的目的,我有一個矩陣,稱為outer_list ,它是一個列表列表。 索引值是外部迭代所在的列號,從 0 到某個數字 n。 上面的列表推導式返回矩陣中索引的第 ' 列,並將其作為列表分配給li 如何創建以這種方式創建列表的 for 循環?

這只是表達list一種更短的方式。

li = [row[index] for row in outer_list]

相當於:

li = []
for row in outer_list:
    li.append(row[index])

一旦習慣了語法,它就會成為創建list (和其他可迭代對象)的一種整潔方式。

題:

我怎么能把它改成 for 循環?

li = [row[index] for row in outer_list]

回答:

li = []
for row in outer_list:
   li.append(row[index])

假設外部迭代是針對索引的,這段代碼可以有效地重寫為:

for row in outer_list:
    li.append(row[index])

在這里,您正在對outer_list內的列表進行迭代。 因此,第一次迭代會將outer_list的第一個列表添加到li ,然后附加第二個列表,依此類推。

您的問題似乎暗示此代碼段已經在 for 循環內,如下所示:

outer_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for index in xrange(3):
    li = [row[index] for row in outer_list]
    print li

這將輸出:

[1, 4, 7]
[2, 5, 8]
[3, 6, 9]

您可以通過在外循環內嵌套一個內循環來將其轉換為僅使用傳統的for循環:

outer_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for index in xrange(3):
    li = []                    # initial empty list
    for row in outer_list:     # our inner loop
        li.append(row[index])  # Build the list "li" iteratively
    print li

如果您將此嵌套列表視為矩陣,那么您所描述的實際上是對矩陣進行轉置。 你也可以完全通過列表推導來做到這一點:

outer_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

transpose = [[row[i] for row in outer_list] for i in range(len(outer_list[0]))]

print transpose

產生:

[[1, 4, 7],
[2, 5, 8],
[3, 6, 9]]

如圖Python的官方教程這里

出於完整性的考慮,我已經包含了嵌套列表理解示例,但明智的說法是:使用嵌套列表理解通常會使代碼更難理解,而不是更多。 僅僅因為你可以並不意味着你應該。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM