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)
您可以使用内置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一次来获取迭代器的下一个(因此,这里是第一个)元素。
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |