n个列表中项目的所有可能组合

2024-06-26 14:56:52 发布

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

我需要开发一个包含所有可能组合的列表,按n个列表中元素的顺序排列。基本上,我正在尝试找到所有可能的路径,稍后我将在我的程序的另一部分中需要这些路径。你知道吗

我已经为两个列表编写了一些简单的代码,但问题是我不知道用户会给出多少输入,所以我不得不猜测。目前,我已经定义了一个函数,它输出所有可能的组合(仅单向,因为它们是路径)。我还测试了其他替代方法,比如itertools(我认为这可能解决了我的问题),或者使用numpy数组(问题是我的数组不是同构的)。你知道吗

输入列表可能如下所示(3维):

chords = [[[1, 4, 8, 12], [1, 4, 10, 12]], [[4, 7, 13, 19], [4, 9, 13, 21]]]

我的函数可以生成两个列表之间的排列:

def combination(list1, list2):
    list = []
    for x in list1:
        for y in list2:
            list.append([x,y])
    return list

combination(chords[0], chords[1])

此函数按预期工作,但问题是,例如,当我引入combination(combination(chords[0], chords[1]), chords[3])时,它不分别计算chords[0]chords[1](仍然按预期工作)。你知道吗

编辑:

好吧,就像@iBug指出的,一个好方法是itertools.产品():

bases_chords = [···] #It's a three dimensional array I've filled out  before
possibilities = [] #The list that will contain all the different combinations

for a in product(*bases_chords): #The asterisk means that I input everything on the list
    possibilities.append(a)

print(possibilities)
print(len(possibilities)) #Just to check if the dimensions are right

Tags: the方法函数in路径列表for数组
1条回答
网友
1楼 · 发布于 2024-06-26 14:56:52

itertools.product就是你要找的。它需要多个Iterable(列表是iterables)并生成一个生成器,该生成器对每个列表的所有组合进行循环。你知道吗

参见示例:

>>> for a, b, c in itertools.product([1, 2, 3], "abc", [True, False]):
...  print(a, b, c)
...
1 a True
1 a False
1 b True
1 b False
1 c True
1 c False
2 a True
2 a False
2 b True
2 b False
2 c True
2 c False
3 a True
3 a False
3 b True
3 b False
3 c True
3 c False
>>>

所以你的用例会变成:

itertools.product(*chords)

相关问题 更多 >