【发布时间】:2020-08-19 15:14:11
【问题描述】:
我重新发布这个问题是因为我在上一篇文章中被告知有一个解决方案。
我有 2 个列表:
list1 = ["foo", "bar", "lorem"]
list2 = ["X", "Y"]
我想从这两个列表中获得可能的组合,意思是:
[["foo", "bar", "lorem"],
["foo", "bar", "loremX"],
["foo", "barX", "loremX"],
["fooX", "bar", "loremX"],
["fooX", "barX", "loremX"],
["foo", "barX", "lorem"],
["fooX", "barX", "lorem"],
["fooX", "bar", "lorem"],
["foo", "bar", "lorem"],
["foo", "bar", "loremY"],
["foo", "barY", "loremY"],
["fooY", "bar", "loremY"],
["fooY", "barY", "loremY"],
["foo", "barY", "lorem"],
["fooY", "barY", "lorem"],
["fooY", "bar", "lorem"]]
希望我没有错过任何组合。
这个有点迷失了。
它可能应该是 itertools.combinations_with_replacement 的东西
谢谢。
编辑
首先,感谢@titusarmah99 的出色回答。 我设法采用了他的第二个非常简单的解决方案并将其通用:
import itertools
list1 = ["foo", "bar", "lorem"]
list2 = ["X", "Y"]
list2new = [""] + list2
newList = [[list1[i]+list2new[j] for j in range(len(list2new))] for i in range(len(list1))]
for index in range(1, len(list2) + 1):
for c in itertools.product([0,index],repeat=len(list1)):
tmp = [newList[i][c[i]] for i in range(len(c))]
print(tmp)
【问题讨论】:
-
我认为,您显示的最终结果与所有可能组合的定义不太匹配。你能解释一下你想找到什么吗?
-
@titusarmah99 你说得对,我刚刚注意到了。我想找到 list1 中的值 + list2 中的值但不是 list2 中的值 + list1 中的值的所有组合。
-
['fooX', 'bar', 'loremX']、['fooX', 'barX', 'loremY']或['fooX', 'barY', 'lorem']这样的组合呢? -
@titusarmah99 如果您有没有它们的解决方案,那就太好了。否则,我将能够处理它们。
标签: python-3.x list permute