-1

私はPythonに非常に慣れていないので、私がやりたいことを正確に実行しないこのコードを実行しました。ヘルプは大歓迎です。

ここに私がこれまで持っている私のコードがあります

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

[4,3,2,1] のようなものを指定すると、最後の数字は繰り返されず、各文字の組み合わせは 1 回だけです。したがって、たとえば、出力が [4,3,2,2] になることはありません。

しかし、私はそれをしたいです。これは、出力をどのようにしたいかの例です

INPUT = ['1','2','3','4']

OUTPUTs = [1 2 3 4][1 2 3 1][1 2 3 2][1 2 3 3] [1 2 4 1][1 2 4 2] [1 2 4 3] [1 2 4 4] [1 2 1 1]and so on

この変更を実装するためにコードに何ができますか?

あなたの親切な助けに感謝します

編集: ITERTOOLS を使用できません

4

2 に答える 2

1

わかった。itertools.permutations :(を使用して-1を取得しました

itertools を使用せずに、繰り返しによる順列が必要なようです。どうぞ:

def permutation_with_repitition(items, prefix):
  if len(prefix) == len(items):
     yield prefix

  else:
    for item in items:
      prefix.append(item)
      for p in  permutation_with_repitition(items, prefix):
        yield p
      prefix.pop()

L = [1,2,3]

for p in permutation_with_repitition(L, []):
  print p

出力:

[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 2, 1]
[1, 2, 2]
[1, 2, 3]
[1, 3, 1]
[1, 3, 2]
[1, 3, 3]
[2, 1, 1]
[2, 1, 2]
[2, 1, 3]
[2, 2, 1]
[2, 2, 2]
[2, 2, 3]
[2, 3, 1]
[2, 3, 2]
[2, 3, 3]
[3, 1, 1]
[3, 1, 2]
[3, 1, 3]
[3, 2, 1]
[3, 2, 2]
[3, 2, 3]
[3, 3, 1]
[3, 3, 2]
[3, 3, 3]
于 2013-03-11T06:10:12.713 に答える
0

しかし、多分itertools.productはあなたが望むものです:

>>> I = range(3)
>>> print list(itertools.product(I, repeat=len(I)))
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0), (2, 2, 1), (2, 2, 2)]
于 2013-03-11T06:31:36.520 に答える