[英]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.