6

我是编程和 Python 的新手。不知道如何继续解决这个问题(如下所述),因此是这个问题。

我有 n 个列表,每个列表包含 1 个或多个项目。我想要一个包含所有可能组合的新列表,它使用每个列表中的一个项目一次,并且总是。

例子:

list_1 = ['1','2','3']
list_2 = ['2','5','7']
list_3 = ['9','9','8']

结果将是:['129', '129', '128', '159', '159', '158', '179', '179', '178', '229', '229', '228', '259', '259', '258', '329', '329', '328', '359', '359','358', '379', '379', '378']

这里的示例有 3 个列表,每个列表包含 3 个项目,但可以有任意 n 个列表,每个列表包含任意 m 个元素(因此并非所有列表都需要具有相同数量的元素)。

列表的所有元素都是字符串,输出列表也包含字符串。

我该怎么办?

我查看了 itertools.combinations 但我不知道如何将它用于此任务。

4

2 回答 2

11

在这里使用itertools.product()

>>> list_1 = ['1','2','3']
>>> list_2 = ['2','5','7']
>>> list_3 = ['9','9','8']
>>> from itertools import product
>>> ["".join(x) for x in product(list_1,list_2,list_3)]
['129', '129', '128', '159', '159', '158', '179', '179', '178', '229', '229', '228', '259', '259', '258', '279', '279', '278', '329', '329', '328', '359', '359', '358', '379', '379', '378']
于 2012-10-29T20:56:28.223 回答
6

使用列表理解:

result = ["%s%s%s" % (i,j,k) for i in list_1 for j in list_2 for k in list_3]

或使用itertools

product = itertools.product(list_1, list_2, list_3)
result = [''.join(p) for p in product]
于 2012-10-29T20:54:37.883 回答