例如,如果我有一个元组列表,例如
a = [(1,2)] * 4
如何创建每个元组的第一个元素列表?也就是[1, 1, 1, 1]
。
答案 0 :(得分: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]
如果您想获得幻想,请结合map
和operator.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]
答案 1 :(得分:6)
phihag列表理解的两种替代方法:
[x for x, y in a]
from operator import itemgetter
map(itemgetter(0), a)
答案 2 :(得分: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]
答案 3 :(得分:0)
a = [(1,2)] * 4
first_els = [x[0] for x in a]
答案 4 :(得分: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]
答案 5 :(得分:0)
我最近发现了Python的zip()
函数。在这里做我想做的另一种方式是:
list( zip( *a )[0] )
tup_list = zip( list1, list2 )
将两个列表交错为2元组列表,但zip( *tup_list )
执行相反的操作,生成list1
元组列表和{{1}元组}。