我如何将两个维度列表合并到python中的点列表

时间:2018-10-25 18:39:53

标签: python list

假设我有

x1 = [1, 2, 3, 4]
x2 = [1, 4, 9, 16]

如何将它们组合成点:

points = [[1,1],[2,4], ...]

3 个答案:

答案 0 :(得分:6)

您正在寻找zip

>>> X1 = [1, 2, 3, 4]
>>> X2 = [1, 4, 9, 16]
>>> 
>>> [list(pair) for pair in zip(X1, X2)]
>>> [[1, 1], [2, 4], [3, 9], [4, 16]]

如果没有特别的理由将元素列为列表,只需单独使用zip即可生成元组的迭代器(Python 3)或列表(Python 2)。

>>> list(zip(X1, X2)) # or just zip(X1, X2) in Python 2
>>> [(1, 1), (2, 4), (3, 9), (4, 16)]

并且如果您甚至不需要同时在内存中存储所有这些对,例如,如果您要做的只是遍历它们,则不要构建列表。在Python 3中,zip产生一个迭代器。

>>> pairs = zip(X1, X2)
>>> for pair in pairs:
...:    print(pair)
...:    
(1, 1)
(2, 4)
(3, 9)
(4, 16)
>>> 
>>> pairs = zip(X1, X2)
>>> next(pairs)
>>> (1, 1)
>>> next(pairs)
>>> (2, 4)

最后,如果要在Python 2中使用Python 3 zip,请使用itertools中的izip

答案 1 :(得分:2)

您需要zip函数:

>>> for pair in zip(x1, x2):
...    print(pair)
...
(1, 1)
(2, 4)
(3, 9)
(4, 16)
>>>

它会产生一个元组序列,每个元组都包含每个参数的值-在这种情况下,如果有两个参数,您将得到两个元素的元组。

如果您确实需要列表,请使用

for pair in zip(x1, x2):
    print(list(pair))

也要小心,因为如果所有参数的长度都不完全相同,zip会在最短参数耗尽后默默地丢弃所有剩余值。

答案 2 :(得分:0)

zipmap一起用于遍历列表:

x1 = [1, 2, 3, 4]
x2 = [1, 4, 9, 16]

print(list(map(list, zip(x1, x2))))
# [[1, 1], [2, 4], [3, 9], [4, 16]]

zip(x1, x2)返回压缩值的元组。我们使用map将这些元组转换为列表以匹配所需的输出。由于Python 3中的map会生成一个地图对象,因此我们将其重新投射到列表中以与所需的输出匹配。