如何在 Python 中获取复杂列表的第一个元素

Too*_*too -2 python python-2.7

在 Python 中,我曾经通过以下方式获取二维列表的第一个元素

a = [[0, 1], [2, 3]]
a[:][0]
# [0, 2]
Run Code Online (Sandbox Code Playgroud)

现在,列表有点复杂,获取第一个元素的方法不起作用

a = [['sad', 1], ['dsads', 2]]
a[:][0]
# ['sad', 1]
Run Code Online (Sandbox Code Playgroud)

我不知道这里有什么区别。以及如何以这种简单的方式获取第一个元素,而不是

[e[0] for e in a]
Run Code Online (Sandbox Code Playgroud)

Dur*_*tta 5

您可以使用内置zip

聚合来自每个可迭代对象的元素

a = [['sad', 1], ['dsads', 2]]
zip(*a)[0]

#results :
('sad', 'dsads')
Run Code Online (Sandbox Code Playgroud)

如有必要,您可以将最终结果从元组转换为列表。 *用于将列表扁平化为其元素 - zip 接受可迭代对象作为位置参数。zip是一种矩阵转置。

正如评论的那样,您的第一个解决方案 ( a[:][0]) 不正确,它只是采用列表的第一个元素。在这里,您需要首先转换列表,以便将每个第一个元素分组到单独的列表中,对于第二个、第三个 .. 元素依此类推。然后取第一个元素。

更新:

来自@Rawing 的评论:如果列表非常大,请考虑使用

next(itertools.izip(*a))
Run Code Online (Sandbox Code Playgroud)

这是迭代器版本 - 仅在必要时采用列表元素。在这种情况下,它一次构造结果的每个元素,因为我们需要第一个元素,所以我们使用next一次来获取迭代器的下一个(因此,这里是第一个)元素。

  • 如果列表非常大,请考虑使用`next(itertools.izip(*a))`代替。 (2认同)