質問
私は、私は334を持っている場合たとえば、私が取得したい、数値のリストのすべての可能な順列を表示しようとしています:
3 3 4
3 4 3
4 3 3
私は約12桁までの数字の任意のセットのためにこれを行うことができるようにする必要があります。
私はitertools.combinationsのようなものを使用して、おそらくかなり単純な確信しているが、私はかなりの構文の権利を取得することはできません。
TIA サム
解決
>>> lst = [3, 3, 4]
>>> import itertools
>>> set(itertools.permutations(lst))
{(3, 4, 3), (3, 3, 4), (4, 3, 3)}
他のヒント
itertoolsなし
def permute(LIST):
length=len(LIST)
if length <= 1:
yield LIST
else:
for n in range(0,length):
for end in permute( LIST[:n] + LIST[n+1:] ):
yield [ LIST[n] ] + end
for x in permute(["3","3","4"]):
print x
出力
$ ./python.py
['3', '3', '4']
['3', '4', '3']
['3', '3', '4']
['3', '4', '3']
['4', '3', '3']
['4', '3', '3']
あなたは順列、組み合わせていないが欲しいです。参照してください: Pythonでリストのすべての順列を生成する方法の
>>> from itertools import permutations
>>> [a for a in permutations([3,3,4])]
[(3, 3, 4), (3, 4, 3), (3, 3, 4), (3, 4, 3), (4, 3, 3), (4, 3, 3)]
それは2 3の(数学的に行うには正しいものである)を置換するが、あなたの例と同じではないということに注意してください。あなたのリストの番号が重複している場合、これは唯一の違いを行います。
私は、Pythonのitertools
を使用していますが、これを自分で実装しなければならなかった場合、ここでの値のリストについては、指定したサイズのすべての順列を返すコードだと思います。
例:values = [1,2,3]
、size = 2
=> [[3, 2], [2, 3], [2, 1], [3, 1], [1, 3], [1, 2]]
def permutate(values, size):
return map(lambda p: [values[i] for i in p], permutate_positions(len(values), size))
def permutate_positions(n, size):
if (n==1):
return [[n]]
unique = []
for p in map(lambda perm: perm[:size], [ p[:i-1] + [n-1] + p[i-1:] for p in permutate_positions(n-1, size) for i in range(1, n+1) ]):
if p not in unique:
unique.append(p)
return unique
所属していません StackOverflow