如何将两个相等长度的列表转换为表示有序对的嵌套列表列表?

时间:2017-07-11 17:58:11

标签: python list python-3.x numpy nested-lists

例如,如果这些是我的两个列表:

a=[1,2,3,4,5]
b=[6,7,8,9,10]

然后,我想要做的就是找到一种方法:

c=[[1,6],[2,7],[3,8],[4,9],[5,10]]

对不起,可能是基本的问题。如果这会产生影响,那么它们就是numpy数组。

9 个答案:

答案 0 :(得分:3)

如果您想要一个numpy数组,可以使用array.T构建它:

In [15]: a=np.array([1,2,3,4,5])

In [16]: b=np.array([6,7,8,9,10])

In [17]: np.array([a,b]).T
Out[17]: 
array([[ 1,  6],
       [ 2,  7],
       [ 3,  8],
       [ 4,  9],
       [ 5, 10]])

参考:What is the equivalent of "zip()" in Python's numpy?

答案 1 :(得分:2)

一种方法是使用列表理解和zip

>>> [[i, j] for i, j in zip(a,b)]
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]

答案 2 :(得分:1)

我不使用numpy,但可能使用zip

a[i]

它返回一个元组列表。

答案 3 :(得分:1)

只需使用np.transpose

>>> np.transpose([a, b])
array([[ 1,  6],
       [ 2,  7],
       [ 3,  8],
       [ 4,  9],
       [ 5, 10]])

如果您想将结果作为列表,请稍后调用tolist()

>>> np.transpose([a, b]).tolist()
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]

答案 4 :(得分:0)

这会给你你想要的东西。

a = [1,2,3,4,5]
b = [6,7,8,9,10]
c = [list(x) for x in zip(a, b)]

答案 5 :(得分:0)

d = []
for i in range(0, 5):
    d.append([a[i], b[i])

是一种使用元素对创建新2D列表的简单方法。像其他人指出的那样使用zip()函数也是可行的。

答案 6 :(得分:0)

有多种方法可以做到这一点。

zip

如果您只需要访问元素而不修改它们,则可以使用zip(a, b) >[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)] 函数:

[[a[i], b[i]] for i in range(len(a))]
>[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]

如果您确实需要列表列表,则可以使用列表解析:

import numpy as np
np.concatenate([[a], [b]]).T
>array([[1, 6],
        [2, 7],
        [3, 8],
        [4, 9],
        [5, 10]])

最后,如果您需要一个numpy数组,请使用Transpose函数:

chromium-browser

答案 7 :(得分:0)

我非常确定有比这更简单或更pythonic的方式。

list(zip(a,b)

这会输出一个列表列表,而不是仅输出一个输出元组列表的[[i,j] for i,j in zip(a,b)]。这结合了列表理解和zip

还避免了zip(*iterables)

的元组解压缩

不确定哪些更有效率

{{1}}创建一个迭代器,聚合来自每个迭代的元素。

https://docs.python.org/3/library/functions.html#zip

答案 8 :(得分:0)

没有库,您可以使用:

a = [1,2,3,4,5]
b = [6,7,8,9,10]
c = [[a[i],b[i]] for i in range(len(a))]