带有两个列表参数的函数

30 投票
4 回答
17795 浏览
提问于 2025-04-17 12:32

我有两个列表,分别叫做 xscat 和 yscat。我想用列表推导式来从 xscat 中取出 x,从 yscat 中取出 y。最终得到的列表应该包含 peaks([x[0], y[0]]), peaks([x[1], y[1]]) 这样的内容,依此类推。

xscat=yscat=[-1, -1.5,5]
[peaks([x,y]) for x,y in xscat,yscat]

你能用列表推导式找到解决方案吗?或者用其他方法,比如 map?

4 个回答

8

我从你的例子中猜测,你想使用zip()函数,但如果你其实想要遍历xscat和yscat的所有可能组合,那你就需要做更多的工作……

所以,如果你想要的组合是(xscat[0], yscat[0]), (xscat[0], yscat[1]), (xscat[0], yscat[2]),等等……你可以先用一个嵌套的列表推导式:

((x,y) for x in xscat for y in yscat)

这个会生成所有的配对,而

[peaks(x,y) for x in xscat for y in yscat]

如果你想要所有的排列组合,这个应该能给你想要的结果。

另外,使用zip或map的时候要小心——如果xscat和yscat这两个列表的长度不一样,你会得到不同的结果——确保选择一个能给你需要的结果的方式。

11

你需要使用 zip 函数:

[peaks([x,y]) for (x,y) in zip(xscat, yscat)]
44

zip 是你想要的东西:

[peaks([x,y]) for x,y in zip(xscat,yscat)]

撰写回答