請告訴我,它是如何工作的?爲什麼每個迭代結果都寫入數組?這個「[.. for .. in ..]」如何在Python中工作?
list_of_strings = [a.rstrip('\n') for a in list_of_strings]
請告訴我,它是如何工作的?爲什麼每個迭代結果都寫入數組?這個「[.. for .. in ..]」如何在Python中工作?
list_of_strings = [a.rstrip('\n') for a in list_of_strings]
這需要字符串的列表(存儲在變量list_of_strings
),通過它遍歷暫時分配每個串給每個時間變量a
和鋼帶從每個字符串中的字符\n
。結果是列表被分配回相同變量的字符串。
這是使用的List Comprehension。一般來說,大多數for循環和list operations involving append()可以轉換爲等效的列表解析。這裏有一個簡單的例子證明這一點:
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
-loops),但它們很快就很難理解:)
此外,雖然沒有在上面的代碼中顯示,但可以過濾列表中的值理解,即將他們(或不)列入結果列表,取決於他們是否符合某些標準。另外,Python還提供了類似的集合理解和生成器表達式。所有這些都值得學習。
請閱讀An Introduction to List Comprehensions in Python以更好地理解Python的列表解析語法。
這是Python的一項名爲列表推導的功能。基本上,你在括號中寫的是'做這個循環,然後創建一個結果列表'的簡寫。
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。
列表綜合有以下一般形式
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)
OR
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的原語硬盤溫度。
「你也可以嵌套列表解析(就像你可以嵌套for循環一樣),但是他們很快就很難理解」 - >「list(in)comprehensions」? :-) – 2012-08-09 23:15:23
@JS。 ..是的,它可能有時似乎:) – Levon 2012-08-09 23:18:22