簡體   English   中英

如何從現有列表列表中創建第一個元素的新列表

[英]How to make a new list of first elements from existing list of lists

我在下面有一個清單。 我需要用它來創建一個只有國家/地區名稱的新列表。 如何循環x以獲得國家/地區名稱列表?

x = [["UK", "LONDON", "EUROPE"],
     ["US", "WASHINGTON", "AMERICA"],
     ["EG", "CAIRO", "AFRICA"],
     ["JP", "TOKYO", "ASIA"]]

結果應該是這樣的

UK
US
EG
JP

你有兩種方法

使用 for 循環

countries = []

for e in x:
 countries.append(e[0])

或使用列表推導式,這在大多數情況下是更好的選擇

countries = [e[0] for e in x]

此外,如果您的數據源是一個生成器(在這種情況下不是),或者如果您對每個元素進行一些昂貴的處理(也不是這種情況),您可以通過更改方括號來使用generator expression []為括號()

countries = (e[0] for e in x)

這將按需計算元素,如果數據源太長或生成器也將減少與列表理解相比的內存占用。

最易讀的方式可能是:

>>> data = [["UK", "LONDON", "EUROPE"],
            ["US", "WASHINGTON", "AMERICA"],
            ["EG", "CAIRO", "AFRICA"],
            ["JP","TOKYO","ASIA"]]
>>> countries = [country for country, city, continent in data]
>>> countries 
['UK', 'US', 'EG', 'JP']

這個列表推導式清楚地說明了data中每個項目中的三個值是什么,以及哪些將在輸出中,而索引0根本沒有告訴讀者太多。

由於城市LONDON , WASHINGTON , CAIRO , TOKYO出現在列表項的第 1 位(從 0 開始)。 因此,通過列表壓縮從列表項中獲取所有第一項。

例如

>>> x= [["UK", "LONDON", "EUROPE"],["US", "WASHINGTON", "AMERICA"],["EG", "CAIRO", "AFRICA"],["JP","TOKYO","ASIA"]]
>>> [i[1] for i in x]
['LONDON', 'WASHINGTON', 'CAIRO', 'TOKYO']
>>> 

國家相同:

>>> [i[0] for i in x]
['UK', 'US', 'EG', 'JP']

如果您發現自己假設數據x始終包含[COUNTRY, CITYNAME, CONTINENT]形式的列表,您可以從x每個列表中檢索每個第一項,如下所示:

countries = []
for country, cityname, continent in x:
    countries.append(country)

您可以使用列表理解縮短上面的內容。

>>> countries = [country for country, cityname, continent in x]

當然,您可以通過索引訪問該值。

>>> countries = [lst[0] for lst in x]

您還可以解壓縮列表並附加到新列表:

x= [["UK", "LONDON", "EUROPE"],["US", "WASHINGTON", "AMERICA"],["EG", "CAIRO", "AFRICA"],["JP","TOKYO","ASIA"]]

countries = []

for a,b,c in x:
    countries.append(a)

暫無
暫無

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

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