リスト L = [a, b, c] があり、タプルのリストを生成したい:
[(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)...]
L * L を実行しようとしましたが、うまくいきませんでした。誰かがPythonでこれを取得する方法を教えてもらえますか.
リスト L = [a, b, c] があり、タプルのリストを生成したい:
[(a,a), (a,b), (a,c), (b,a), (b,b), (b,c)...]
L * L を実行しようとしましたが、うまくいきませんでした。誰かがPythonでこれを取得する方法を教えてもらえますか.
リスト内包表記でそれを行うことができます:
[ (x,y) for x in L for y in L]
編集
他の人が提案したように itertools.product を使用することもできますが、2.6 以降を使用している場合に限ります。リスト内包表記は、2.0 以降のすべてのバージョンの Python で機能します。itertools.product を使用する場合は、リストではなくジェネレーターを返すことに注意してください。そのため、変換する必要がある場合があります (何をしたいかによって異なります)。
メンバー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]
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バージョンで機能します。
x = [a,b,c] y = [] for item in x: for item2 in x: y.append((item, item2))
たぶんPythonicの方法ではありませんが、機能しています
わかりました私は試しました:
L2 = [(x,y) for x for L in L] そして、これは L 平方を取得します。
これはこれを行うための最良のpythonicの方法ですか? L * L は Python で動作すると思います。
それを行うための最も古い方法は次のとおりです。
def perm(L):
result = []
for i in L:
for j in L:
result.append((i,j))
return result
これは実行時間が O(n^2) であるため、非常に低速ですが、「ビンテージ」スタイルのコードと考えることができます。