将元组列表转换为数组或其他允许简单切片的结构

2024-04-26 18:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

使用列表理解,我创建了一个元组列表

temp = [(1, 0, 1, 0, 2), (1, 0, 1, 0, 5), (1, 0, 2, 0, 2), (1, 0, 2, 0, 5)]

我也可以创建一个列表列表,如果这更容易。你知道吗

不管怎样,我现在想从数据中得到一个数组,或者一个2D列表。我可以使用切片轻松访问上面每个元组中第一个元素的值,比如

first_elements = temp[:,0]

Tags: 数据元素列表切片数组elementstempfirst
3条回答

numpy用于该类型的索引:

import numpy as np
temp = [(1, 0, 1, 0, 2), (1, 0, 1, 0, 5), (1, 0, 2, 0, 2), (1, 0, 2, 0, 5)]

a = np.array(temp)
a[:, 0]

退货

array([1, 1, 1, 1])

注意:您的所有内部列表必须具有相同的大小才能工作。否则,数组构造函数将返回一个Python列表数组。你知道吗

您可以使用^{},它允许您从现有的数据结构中获取不同的组合

例如,要获取每个tuple的第一个元素,请使用:

>>> from operator import itemgetter
>>> temp = [(1, 0, 1, 0, 2), (1, 0, 1, 0, 5), (1, 0, 2, 0, 2), (1, 0, 2, 0, 5)]
>>> list(map(itemgetter(0),temp))
>>> [1, 1, 1, 1]

获取第二个元素

 >>> list(map(itemgetter(1),temp))
 >>> [0, 0, 0, 0]

取第一和第二

 >>> list(map(itemgetter(0,1),temp))
 >>> [(1, 0), (1, 0), (1, 0), (1, 0)]

您可以使用zipnext来获得您想要的:

temp = [(1, 0, 1, 0, 2), (1, 0, 1, 0, 5), (1, 0, 2, 0, 2), (1, 0, 2, 0, 5)]
print(next(zip(*temp)))

退货:

(1, 1, 1, 1)

相关问题 更多 >