我有两个列表xscat和yscat。我希望列表理解分别在xscat和yscat中选取x和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]
你能找到任何使用理解的解决方案吗?或其他方式(地图)?
答案 0 :(得分:44)
zip
就是你想要的:
[peaks([x,y]) for x,y in zip(xscat,yscat)]
答案 1 :(得分:11)
您需要使用zip
:
[peaks([x,y]) for (x,y) in zip(xscat, yscat)]
答案 2 :(得分:8)
我从你的例子中假设你想要使用zip(),但是,如果你真正想做的是迭代xscat和yscat的所有可能组合,那么你还有更多工作要做......
所以,如果你想要(xscat [0],yscat [0]),(xscat [0],yscat [1]),(xscat [0],yscat [2])等...你可以首先做一个嵌套的理解:
((x,y)表示xscat中的x表示yscat中的y)
将生成所有对和
如果你想要所有的排列,[xscat中x的峰值(x,y),yscat中的y]
应该会产生解决方案。
另外,请注意zip / map - 如果列表(xscat和yscat)的长度不同,你会得到不同的结果 - 确保选择那个产生你需要的解决方案的结果。
答案 3 :(得分:3)
尝试zip:http://docs.python.org/library/functions.html#zip
[peaks(x) for x in zip(zscat, yscat)]
修改强>
这假设峰值可以接受元组。