0

例如,如果我有一个元组列表,例如

a = [(1,2)] * 4

我将如何创建每个元组的第一个元素的列表?即,[1, 1, 1, 1]

4

6 回答 6

7

使用列表理解

>>> 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]
于 2012-06-27T16:45:40.227 回答
6

phihag 的列表理解的两种替代方法:

[x for x, y in a]

from operator import itemgetter
map(itemgetter(0), a)
于 2012-06-27T16:47:20.930 回答
4

有几种方法:

>>> 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]

在引入列表推导时,使用map的技术失宠,但现在由于并行 map/reduce 和多处理技术而卷土重来:

>>> # 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]
于 2012-06-27T16:48:25.170 回答
0
a = [(1,2)] * 4
first_els = [x[0] for x in a]
于 2012-06-27T16:46:58.723 回答
0

假设您有一个元组列表:

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

访问每个元组的第一个元素将涉及使用 [0] 下标,访问每个元组以提取每个第一个元素将涉及一个列表推导,它可以分配给一个变量,如下所示:

resultant_list = [element[0] for element in lta]
>>> resultant_list
[1, 2, 44, 37]
于 2012-06-27T21:47:46.253 回答
0

我最近发现了 Python 的zip()功能。在这里做我想做的另一种方法是:

list( zip( *a )[0] )

tup_list = zip( list1, list2 )将两个列表交错成一个 2 元组列表,但zip( *tup_list )相反,导致一个元组的列表list1和 的元组list2

于 2012-06-28T18:43:17.003 回答