我有一些列表的数组。这是numpy.ndarray类型:
array([list([2692, 2711]), list([2751, 2770]), list([3455, 3462]),
list([4020, 4027]), list([7707, 7726]), list([7893, 7912]),
list([8118, 8126]), list([8174, 8179]), list([8215, 8234]),
list([9227, 9246]), list([9518, 9537]), list([9839, 9859]),
list([10002, 10021]), list([10024, 10043]), list([10158, 10178]),
list([11346, 11365])], dtype=object)
我想从每个子列表的第一个元素创建一个列表。我通过列表理解来做到这一点:
lst = [ x[1] for x in m ]
有没有更快的方法来创建此列表?
答案 0 :(得分:1)
>>> m[:, 0]
array([2692, 2751, 3455, 4020, 7707, 7893, 8118, 8174, 8215, 9227, 9518,
9839, 10002, 10024, 10158, 11346], dtype=object)
答案 1 :(得分:1)
使用m.tolist()
而不是m
可以大大提高速度。要进行其他次要节省,请使用zip
:
[*zip(*m.tolist()).__next__()]
# [2692, 2751, 3455, 4020, 7707, 7893, 8118, 8174, 8215, 9227, 9518, 9839, 10002, 10024, 10158, 11346]
答案 2 :(得分:0)
您的样本是列表对象的一维数组,因此直接分割为m[:, 0]
的轴1将会失败,因为它没有轴1。如果每个子列表的长度都不同,那么我认为比列表理解更好的解决方案。但是,如果每个子列表的长度相同(如您的示例中每个子列表的长度为2),则可以使用np.vstack
将其转换为二维数组和切片,如下所示:
n = np.vstack(m)[:,0].tolist()
Out[371]:
[2692,
2751,
3455,
4020,
7707,
7893,
8118,
8174,
8215,
9227,
9518,
9839,
10002,
10024,
10158,
11346]