在Python中从一个列表的列表中获取内部列表的第n个元素

27

可能是重复问题:
如何尽可能高效地获取内部列表中的前几项

假设我有以下代码:

a = [ [1,2], [2,9], [3,7] ]

我想获取每个内部列表的第一个元素:

b = [1,2,3]

不需要像我现在这样进行这个 hack:

for inner in a:
    b.append(inner[0])

我相信有一种一行代码可以解决它,但我不知道具体该找什么。

1个回答

72

只需将您的列表推导式更改为:

b = [el[0] for el in a]

或:

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

或者,如果你正在处理“正确的数组”:

import numpy as np
a = [ [1,2], [2,9], [3,7] ]
na = np.array(a)
print na[:,0]
# array([1, 2, 3])

还有 zip

print zip(*a)[0]

1
我猜没有其他选择可以实现这个。 :) - Ashwini Chaudhary
@AshwiniChaudhary 我正在苦思冥想还能想到什么...稍等一下;) - 你认为 map(next, map(iter, a)) 是否过于复杂了? - Jon Clements
它很好,但与其他的相比较慢。 - Ashwini Chaudhary
我喜欢 zip(*a)[0] 这个建议! - Dannid
1
在 Python 3 中,zip() 返回一个迭代器而不是列表,因此你需要使用 list(zip(*a))[0],具有讽刺意味的是它返回一个元组,如果你需要返回一个列表,则需要再次使用 list() 包裹一下。 - kevin_theinfinityfund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接