簡體   English   中英

這個“[... for .. in ..]”如何在Python中運行?

[英]How does this “[.. for .. in ..]” work in Python?

請告訴我,它是如何工作的? 為什么每個迭代結果寫入數組?

list_of_strings = [a.rstrip('\n') for a in list_of_strings]

這個列表理解

list_of_strings = [a.rstrip('\n') for a in list_of_strings]

相當於這個更通用的代碼:

temp_list=[]
for a in list_of_strings:
   temp_list.append(a.rstrip('\n'))

list_of_strings=temp_list

在大多數情況下,列表理解更快更容易閱讀。 學習它並使用它,如果你想編寫非平凡的Python。

這將獲取一個字符串列表(存儲在變量list_of_strings ),迭代它每次將每個字符串臨時分配給變量a並從每個字符串中刪除\\n字符。 結果是分配回同一變量的字符串列表

這是使用列表理解 通常, 涉及append()的大多數for循環和列表操作可以轉換為等效的列表推導。 這是一個簡單的例子來證明這一點:

   new_list = []
   for i in range(10):
       new_list.append(i**2)

可以簡單地重寫為

   new_list = [i**2 for i in range(10)]

您可能會發現使用列表理解並使用for -loop重寫它來測試您的理解(兩者都應該產生相同的結果) for有益的。

在大多數情況下,列表理解比-loop的等效物更快for並且顯然是表達算法的更緊湊的方式。 您也可以使用嵌套列表推導(就像您可以嵌套for -loops一樣),但它們很快就會變得難以理解:)

此外,雖然上面的代碼中沒有顯示,但您可以過濾列表推導中的值,即在結果列表中包含它們(或不包括它們),具體取決於它們是否符合某些條件。

另外,Python還提供了類似的集合理解和生成器表達式。 所有這些都值得學習。

請閱讀Python中的列表推導簡介,以便更好地理解Python的列表推導語法。

每個迭代結果都不會寫入列表,而是在右側創建一個全新的列表,然后分配給=符號左側的變量list_of_strings。

這是Python的一個名為list comprehensions的特性。 基本上,您在括號中寫的是'執行此循環然后創建結果列表'的簡寫。

列表理解具有以下通用形式

result = [ x for x in list]

該列表理解的等效程序代碼是:

for x in list:
    x


創建有用列表推導的下一步是調用或將函數應用於括號后的第一個x。

result = [function(x) for x in list]
result = [x.function(arg) for x in list]

list_of_strings = [a.rstrip('\n') for a in list_of_strings]

result = [x*2 for x in list_of_numbers]

該列表理解的等效程序代碼是:

for x in list:
    function(x)

要么

for x in list:
    x.function()


要為列表推導添加更多功能,您可以添加以下條件:

result = [function(x) for x in list if x == True]

list_of_strings = [a.rstrip('\n') for a in list_of_strings if '\n' in a]

result = [x*2 for x in [1,2,3,4,5,6,7] if x > 3]

列表理解可以很好地過濾類似函數,並且通常與cpython中的map和filter等硬編碼基元一樣快。

暫無
暫無

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

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