7

リスト L = [a, b, c] があり、タプルのリストを生成したい:

[(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)...] 

L * L を実行しようとしましたが、うまくいきませんでした。誰かがPythonでこれを取得する方法を教えてもらえますか.

4

7 に答える 7

22

リスト内包表記でそれを行うことができます:

[ (x,y) for x in L for y in L]

編集

他の人が提案したように itertools.product を使用することもできますが、2.6 以降を使用している場合に限ります。リスト内包表記は、2.0 以降のすべてのバージョンの Python で機能します。itertools.product を使用する場合は、リストではなくジェネレーターを返すことに注意してください。そのため、変換する必要がある場合があります (何をしたいかによって異なります)。

于 2010-01-30T23:07:31.147 に答える
15

このitertoolsモジュールには、この種の作業に役立つ多くの関数が含まれています。あなたが探しているように見えますproduct

>>> import itertools
>>> L = [1,2,3]
>>> itertools.product(L,L)
<itertools.product object at 0x83788>
>>> list(_)
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
于 2010-01-30T23:07:27.937 に答える
7

メンバーitertoolsを提供するモジュールを見てください。product

L =[1,2,3]

import itertools
res = list(itertools.product(L,L))
print(res)

与えます:

[(1,1),(1,2),(1,3),(2,1), ....  and so on]
于 2010-01-30T23:07:01.777 に答える
3

2つの主な選択肢:

>>> L = ['a', 'b', 'c']
>>> import itertools
>>> list(itertools.product(L, L))
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
>>> [(one, two) for one in L for two in L]
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
>>> 

前者はPython2.6以降が必要です。後者は、関連付けられている可能性のあるほぼすべてのPythonバージョンで機能します。

于 2010-01-30T23:10:54.103 に答える
0

x = [a,b,c] y = [] for item in x: for item2 in x: y.append((item, item2))

たぶんPythonicの方法ではありませんが、機能しています

于 2010-01-30T23:07:59.110 に答える
0

わかりました私は試しました:

L2 = [(x,y) for x for L in L] そして、これは L 平方を取得します。

これはこれを行うための最良のpythonicの方法ですか? L * L は Python で動作すると思います。

于 2010-01-30T23:08:59.997 に答える
0

それを行うための最も古い方法は次のとおりです。

def perm(L):
    result = []
    for i in L:
        for j in L:
            result.append((i,j))
    return result

これは実行時間が O(n^2) であるため、非常に低速ですが、「ビンテージ」スタイルのコードと考えることができます。

于 2010-01-31T00:23:31.490 に答える