6

私はプログラミングとPythonが初めてです。この問題(以下で説明)を達成する方法がわからないため、質問です。

n 個のリストがあり、それぞれに 1 つ以上のアイテムが含まれています。各リストから 1 つの項目を 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 つのリストがありますが、それぞれに任意の m 個の要素を含む任意の n 個のリストが存在する可能性があります (したがって、すべてのリストが同じ数の要素を持つ必要はありません)。

リストのすべての要素は文字列であり、出力リストにも文字列が含まれます。

私は何をすべきか?

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 に答える