2015-04-09 5 views
-3

у меня есть список из 13 номеров, каждый из них может быть равен любым числом от 1 до 9.Iterate список номера

мне нужно перебирать все возможные варианты этих чисел в списке: когда number1=1 и number2=1/2/3/4/5/6/7/8/9 (эксклюзивный 0) и т. Д. Тогда мне нужно сделать то же самое для number1=2 и так далее.

Я не могу понять, как это сделать - видимо, через цикл «за»?

for x in range(1,10): 
    A=[x for i in range(13)] 
for i in range(len(A)): 
    for t in range(1,10): 
     A[i]=t 
     print A 

Это не работает.

+1

Используйте 'itertools.product'. – Kevin

ответ

1

Я бы рекомендовал использовать itertools.product.

>>> from itertools import product 
>>> list(product(range(1, 10), repeat=2)) 
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)] 

Однако я бы не рекомендовал делать это на 13 номеров. Зачем? Посмотрите:

>>> len(list(product(range(1, 10), repeat=2))) 
81 

9^2 = 81. Таким образом, чтобы вычислить его на 13, вам нужно будет вычислить 9^13 кортежи с длиной 13. Это займет довольно много времени.

К счастью, itertools.product возвращает объект-генератор, поэтому вы можете может перебирать значения один за другим, если хотите. Просто не пытайтесь превратить его в список.

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