2009-09-06 2 views
3

Я пытаюсь создать список всех возможных комбинаций чисел в пределах набора из четырех чисел, используя все цифры от 0 до 9.максимального числа комбинаций

Я получаю близко, но выход не показывает все возможное сочетание от 0000 до 9999.

Любые подсказки относительно того, почему следующий код отбрасывает определенные комбинации?

 
def permgen(items, n): 
    if n==0: yield [] 
    else: 
     for i in range(len(items)): 
      for cc in permgen(items[:i]+items[i+1:],n-1): 
       yield [items[i]]+cc 

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

Может ли число отображаться более одного раза? Является ли 1234 другой комбинацией, чем 1243? –

+0

Да, это были бы две отдельные комбинации. – 2009-09-06 18:04:37

ответ

4

Эта линия:

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

Вы в основном говорят «получить номер, чем добавить еще один отличается от Ir, повторить п раз, а затем возвращает список из них Если вы измените эту строку на:

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

, тогда вы получаете все комбинации.

12

Если у вас есть python 2.6, почему бы не использовать itertools.combinations?

from itertools import combinations 
combinations(range(10), 4) 
+0

Спасибо, я мог бы многое сделать с этим. – 2009-09-06 18:08:04

0
int ra; 
for(ra=0,ra<10000;ra++) printf("%04u\n",ra); 
+3

У компилятора Python наверняка будет полевой день с ЭТОГО кода ... ;-) –

4

Взгляните на itertools' combinatoric generators:

>>> 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_replacement доступен в Python 3.1 (или 2.7).

Кажется, что itertools.product является наиболее подходящим для вашей задачи.

+0

Не знал об этом. Выглядит отлично. – 2009-09-06 18:05:24

Смежные вопросы