3

0 から 9 までのすべての数字を使用して、4 つの数字のセット内で可能なすべての数字の組み合わせのリストを生成しようとしています。

近づいていますが、0000 から 9999 までのすべての可能な組み合わせが出力に表示されるわけではありません。

次のコードが特定の組み合わせをドロップする理由についての手がかりはありますか?

def permgen(アイテム、n):
  n==0 の場合: 利回り []
    そうしないと:
        for i in range(len(items)):
            for cc in permgen(items[:i]+items[i+1:],n-1):
                収量[アイテム[i]]+cc

__name__=="__main__" の場合:
    for c in permgen(['0','1','2','3','4','5','6','7','8','9'],4): print ''.join(c)
4

4 に答える 4

12

Python 2.6 を使用している場合は、itertools.combinationsを使用してみませんか?

from itertools import combinations
combinations(range(10), 4)
于 2009-09-06T15:34:42.343 に答える
4

itertools の組み合わせジェネレーターを見てみましょう:

>>> from itertools import combinations, permutations, product
>>> def pp(chunks):
...     print(' '.join(map(''.join, chunks)))
...
>>> pp(combinations('012', 2))
01 02 12
>>> pp(permutations('012', 2))
01 02 10 12 20 21
>>> pp(product('012', repeat=2))
00 01 02 10 11 12 20 21 22
>>> from itertools import combinations_with_replacement
>>> pp(combinations_with_replacement('012', 2))
00 01 02 11 12 22

combinations_with_replacementPython 3.1 (または 2.7) で利用できます。

itertools.productがあなたのタスクに最も適しているようです。

于 2009-09-06T17:34:13.740 に答える
4

この行:

for cc in permgen(items[:i]+items[i+1:],n-1):

基本的に、「 ir とは異なる別の数字を追加し、n 回繰り返して、これらの数字のリストを返すよりも、数字を取得します。これにより、数字が複数回表示されない数字が得られます。その行を次のように変更すると、 :

for cc in permgen(items,n-1):

次に、すべての組み合わせを取得します。

于 2009-09-06T15:40:47.293 に答える
0
int ra;
for(ra=0,ra<10000;ra++) printf("%04u\n",ra);
于 2009-09-06T15:37:13.727 に答える