如何从n个列表中形成所有可能的组合

2024-05-16 00:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题很难在标题中表达出来,因此需要一个例子:

我有3个清单:

L1 = ["Eagle", "Panther"]

L2 = ["Warrior", "Talon", "Machete"]

L3 = ["Feather", "Raptor", "Hunter", "Piranha"]

列表可以有不同的大小

我想形成所有子集{[a,b,c]},这样aL1bL2cL3

例如:

{["Eagle", "Warrior", "Feather"], ["Eagle", "Warrior", "Raptor"], ["Panther", "Machete", "Feather"]...}

["Eagle", "Warrior", "Feather"]["Eagle", "Feather", "Warrior"]相同,因此顺序并不重要

我只需要所有的子集

我看到许多帖子,我可以在其中形成一个列表的子集,但在这里找不到我要找的内容。我显然可以循环并执行它,但我想知道是否有itertools解决方案


Tags: l1标题列表子集例子eaglefeathertalon
2条回答
import itertools
L1=["Eagle","Panter"]
L2=["Warrior","Talon","Machete"]
L3=["Feather","Raptor","Hunter","Piranha"]
res=set()
for i in itertools.product(L1,L2,L3):
    res.add(tuple(sorted(i)))
print(res)

itertools.product用于此

import itertools

L1 = ["Eagle", "Panther"]

L2 = ["Warrior", "Talon", "Machete"]

L3 = ["Feather", "Raptor", "Hunter", "Piranha"]

for x in itertools.product(L1,L2,L3):
    print(x)

输出

('Eagle', 'Warrior', 'Feather')
('Eagle', 'Warrior', 'Raptor')
('Eagle', 'Warrior', 'Hunter')
('Eagle', 'Warrior', 'Piranha')
('Eagle', 'Talon', 'Feather')
('Eagle', 'Talon', 'Raptor')
('Eagle', 'Talon', 'Hunter')
('Eagle', 'Talon', 'Piranha')
('Eagle', 'Machete', 'Feather')
('Eagle', 'Machete', 'Raptor')
('Eagle', 'Machete', 'Hunter')
('Eagle', 'Machete', 'Piranha')
('Panther', 'Warrior', 'Feather')
('Panther', 'Warrior', 'Raptor')
('Panther', 'Warrior', 'Hunter')
('Panther', 'Warrior', 'Piranha')
('Panther', 'Talon', 'Feather')
('Panther', 'Talon', 'Raptor')
('Panther', 'Talon', 'Hunter')
('Panther', 'Talon', 'Piranha')
('Panther', 'Machete', 'Feather')
('Panther', 'Machete', 'Raptor')
('Panther', 'Machete', 'Hunter')
('Panther', 'Machete', 'Piranha')

相关问题 更多 >