首页 > 解决方案 > 创建两个列表的组合,直到一个列表中的值高于另一个?

问题描述

我设法使两者的所有可能组合,lists但无法弄清楚如何创建组合,直到值list1超过另一个。

 list1 = [10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,90,100]

 list2 = [30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,
          140,150,155,160,165,170,
          175,180,185,195,200]

我尝试过但仍在修改的代码,在这里搜索了stackoverflow:两个列表的组合

 y = [zip(x,list1) for x in itertools.permutations(list2,len(list1)) if x > list1]

预期输出:

combi = [[(30,10),(30,15),(30,20),(30,25)],[(35,10),......,
          (35,30)],.....,[(120,10),.......,(120,100)......]]

如果有办法限制第一项和第二项组合之间的差异,那将是完美的。

谢谢

标签: pythonitertools

解决方案


您不需要为此使用itertoolszip。您可以在列表理解中使用双for循环来做到这一点:

result = [[(elem2,elem1) for elem1 in list1 if elem1 < elem2] for elem2 in list2]

推荐阅读