簡體   English   中英

從元組列表創建Python列表

[英]Creating a Python list from a list of tuples

例如,如果我有一個元組列表,例如

a = [(1,2)] * 4

我將如何創建每個元組的第一個元素的列表? [1, 1, 1, 1]

使用列表理解

>>> a = [(1,2)] * 4
>>> [t[0] for t in a]
[1, 1, 1, 1]

您還可以打開元組的包裝:

>>> [first for first,second in a]
[1, 1, 1, 1]

如果您想花哨的話,請結合mapoperator.itemgetter 在python 3中,您必須將構造包裝在list以獲得一個列表,而不是一個可迭代的列表:

>>> import operator
>>> map(operator.itemgetter(0), a)
<map object at 0x7f3971029290>
>>> list(map(operator.itemgetter(0), a))
[1, 1, 1, 1]

phihag列表理解的兩種替代方法:

[x for x, y in a]

from operator import itemgetter
map(itemgetter(0), a)

有幾種方法:

>>> a = [(1,2)] * 4

>>> # List comprehension
>>> [x for x, y in a]
[1, 1, 1, 1]

>>> # Map and lambda
>>> map(lambda t: t[0], a)
[1, 1, 1, 1]

>>> # Map and itemgetter
>>> import operator
>>> map(operator.itemgetter(0), a)
[1, 1, 1, 1]

引入列表理解后,使用地圖的技術就不受歡迎了,但是現在由於並行地圖/歸約和多處理技術而卷土重來:

>>> # Multi-threading approach
>>> from multiprocessing.pool import ThreadPool as Pool
>>> Pool(2).map(operator.itemgetter(0), a)
[1, 1, 1, 1]

>>> # Multiple processes approach
>>> from multiprocessing import Pool
>>> def first(t):
        return t[0]
>>> Pool(2).map(first, a)
[1, 1, 1, 1]
a = [(1,2)] * 4
first_els = [x[0] for x in a]

假設您有一個元組列表:

lta = [(1,2), (2,3), (44,45), (37,38)]

訪問每個元組的第一個元素將涉及用[0]下標,並且訪問每個元組以提取每個第一個元素將涉及一個列表理解,可以將其分配給一個變量,如下所示:

resultant_list = [element[0] for element in lta]
>>> resultant_list
[1, 2, 44, 37]

我最近發現了Python的zip()函數。 做我想在這里做的另一種方法是:

list( zip( *a )[0] )

tup_list = zip( list1, list2 )兩個列表交織為2個元組的列表,但是zip( *tup_list )卻相反,從而得到list1元組和list2元組的列表。

暫無
暫無

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

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