首页 > 解决方案 > 如何将 X 列表和 Y 列表组合成一个(X,Y)列表?

问题描述

我有两个清单:

X = [1.4 ,3.2, 5.8, 2.1, 3.5]
Y = [2.1, 5.6, 1.2, 1.3, 4.6]

如何从Xand中的所有内容制作一个数组Y

我试过这个:

for i in X:
    X_Y[i] = {X[i], Y[i]}

但这给了我一个错误list indices must be integers or slices, not float

所以然后我尝试zip了,但它只是给了我一个位置zip at ...

我将不胜感激任何帮助!

标签: python

解决方案


您可以使用zip和列表推导来获取 (X, Y) 元组的列表。

XY = [i for i in zip(X, Y)]
# [(1.4, 2.1), (3.2, 5.6), (5.8, 1.2), (2.1, 1.3), (3.5, 4.6)]

较短的版本(另请参阅下面的 Nathan 解决方案)

XY = list(zip(X, Y))

您的解决方案中的问题:当您这样做时for i in X:,您基本上是在迭代X. 所以在第一次迭代中,i将是1.4然后你做X_Y[i]。第一个问题是您没有初始化空列表X_Y,第二个问题是列表的索引不能是浮点数。此外,要将元素添加到列表中,您可以使用append. X[i], Y[i]对于第一次迭代意味着X[1.4], Y[1.4]不正确。


如何让你的代码工作?

您首先初始化一个空列表。然后您遍历XandY列表的长度,然后append逐一对如下:

X_Y = []
for i in range(len(X)):
    X_Y.append((X[i], Y[i]))

使用列表理解的这三行代码的一个衬里将是

X_Y = [(X[i], Y[i]) for i in range(len(X))]

另一种衬垫使用maplambda功能。在这里,您创建一个 lambda 函数,该函数接受两个参数:xandy并在实际列表中执行操作(x, y)元素XY. list()作用于映射生成器以获得最终列表X_Y

X_Y = list(map(lambda x, y: (x, y), X, Y))

推荐阅读