Почему комбинации объекта теряют свое содержимое после использования списка? - PullRequest
0 голосов
/ 27 декабря 2018

Это может быть просто, но я застрял на некоторое время.

Я пытался перебрать две комбинации.Но он не прошел все пункты.

itt_1 = [1, 2, 3] 
comb_1 = combinations(itt, 2)
itt_2 = ['a', 'b', 'c']
comb_2 = combinations(itt_2, 2)
count = 0
for ii in list(comb_1):
    for jj in list(comb_2):
        print ii, jj

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

(1, 2) ('a', 'b')
(1, 2) ('a', 'c')
(1, 2) ('b', 'c')

Я считаю, что есть какое-то отношение к комбинациям, так как это генератор, который нужноиспользуется в итерациях и может быть использован только один раз.Означает ли это, что его нельзя использовать во вложенном цикле for?Почему он печатает только первую комбинацию comb_1 в приведенном выше примере?

1 Ответ

0 голосов
/ 27 декабря 2018

Я думаю, причина в том, что во внутреннем цикле он как-то теряет след comb_2: запустите это:

itt_1 = [1, 2, 3] 
comb_1 = combinations(itt_1, 2)
itt_2 = ['a', 'b', 'c']
comb_2 = combinations(itt_2, 2)
count = 0
for ii in list(comb_1):
    print ii
    for jj in list(comb_2):
        print ii, jj

и вы получите следующий результат, который предсказывает то же самое:

(1, 2)
(1, 2) ('a', 'b')
(1, 2) ('a', 'c')
(1, 2) ('b', 'c')
(1, 3)
(2, 3)

попробуйте заранее преобразовать их в списки.это работает для меня:

itt_1 = [1, 2, 3]
comb_1 = list(combinations(itt_1, 2))
itt_2 = ['a', 'b', 'c']
comb_2 = list(combinations(itt_2, 2))
for ii in comb_1:
    for jj in comb_2:
        print ii, jj

Результат:

(1, 2) ('a', 'b')
(1, 2) ('a', 'c')
(1, 2) ('b', 'c')
(1, 3) ('a', 'b')
(1, 3) ('a', 'c')
(1, 3) ('b', 'c')
(2, 3) ('a', 'b')
(2, 3) ('a', 'c')
(2, 3) ('b', 'c')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...