python для l oop вылетает python - PullRequest
0 голосов
/ 11 апреля 2020

Когда я пытаюсь запустить большое для l oop, но python IDLE падает. есть ли способ это исправить? моя программа должна печатать каждую комбинацию букв.

from itertools import product
def letter_range(start, stop="{", step=1):
     for ord_ in range(ord(start.lower()), (ord(stop.lower()))+1, step):
        yield chr(ord_)

a = list(letter_range("a", "z"))
print a
b = len(a)
list1 = list(product(a, repeat=b))
for index in list1:
    index = list(index)
    printed = "".join(index)
    print printed

1 Ответ

0 голосов
/ 11 апреля 2020

Строка, которая разбивает ваш IDLE, - это строка:

list1 = list(product(a, repeat=b))

Почему?

itertools.product возвращает Iterator. Если вы напечатаете его, вы не увидите много:

print(product(a, repeat=len(a)))
<itertools.product object at 0x7f0d3b8363f0>

Вы можете по-прежнему использовать свой итератор в для l oop, не вызывая 'list`, как это:

a = list(letter_range("a", "z"))

it = product(a, repeat=len(a))

for value in it:
    print(''.join(value))

Вам все равно придется прекратить выполнение этого скрипта, так как он будет спамить много текста!

Когда вы сейчас пишете что-то вроде x = list(it), вы говорите Python, что он потребляет все элементы из вашего итератора it и сохраните их в переменной x. Но поскольку ваш итератор создает так много элементов, ваша программа не будет работать, потому что у вас недостаточно ОЗУ.

Вот исправленная версия вашего кода. Он не обрабатывает sh, но завершается дружеским предупреждением с помощью перечисления .


from itertools import product


def letter_range(start, stop="{", step=1):
    for ord_ in range(ord(start.lower()), (ord(stop.lower())) + 1, step):
        yield chr(ord_)


a = list(letter_range("a", "z"))

it = product(a, repeat=len(a))

for i, value in enumerate(it):
    print(''.join(value))
    if i > 1000:
        print("aborted. too many results")
        break

Когда вы уверены, что результат - то, что вы хотите, просто удалите ' if'-оператор и выпейте кофе, пока работает ваша программа.

...