Как решить ошибку Python 3.6 itertools? - PullRequest
1 голос
/ 26 мая 2020

Итак, у меня есть очень-очень базовый c код:

t = [1, 2, 3, 4, 5, 6, 7, 8, 9, ... 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,90]
c = list(itertools.combinations(t, 5))
print(c)

Когда я запускаю его, это занимает примерно 15 секунд, а затем появляется следующая ошибка:

Traceback (most recent call last):
  File "H:/<path>/main.py", line 13, in <module>
    print(c)
OSError: [Errno 22] Invalid argument

Но когда я запускаю этот код:

t = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 6, 7, 8, 9, 10]
c = list(itertools.combinations(t, 5))
print(c)

Он не дает мне ошибки, вместо этого мой желаемый результат:

[(1, 2, 3, 4, 5), (1, 2, 3, 4, 6), (1, 2, 3, 4, 7), ... (10, 7, 8, 9, 10), (6, 7, 8, 9, 10)]

Почему он не работает с большим количеством чисел в list t?

Я не настаиваю на itertools, поэтому вы можете показать мне другой пример этого. Просто надо давать каждую комбинацию без повторения.

1 Ответ

0 голосов
/ 26 мая 2020

Попробуйте вместо этого:

t = range(1, 91)
c = itertools.combinations(t, 5)

for i in c:
    print(i)

Он работал на моем компьютере около 10 минут и корректно завершился с последней комбинацией (86, 87, 88, 89, 90).

Разница в том, что я не создавал список, поэтому c - это генератор , то есть он генерирует только 1 комбинацию за раз, которую я немедленно распечатал.

...