2015-10-17 3 views
-1

Итак, у меня есть сценарий генератора комбинации ... и он работает ... так, как он работает, он генерирует комбинации, а затем копирует их в текстовый файл , ну что ж, жестко учитывая, что на 6 цифр там 1,4 миллиарда перестановок .., а также после примерно 1,3 млн. фунтов стерлингов это судорожно? так как я делаю это так, когда это делает комбинацию, он сохраняет его в текстовый файл, и если он выходит из строя ... он может перезапустить из последней записанной строки в файле .txt сценария:Python Combination Generator - Хранить в файл .txt

import itertools 
from itertools import * 

lower_a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 

all = [] 
all = lower_a + num 

def com(): 
    for x in range(2): 
     for s in itertools.product(all, repeat=x): 
      print(''.join(s)) 

print(com()) 
+2

Вы абсолютно уверены, что вам действительно нужен файл, содержащий все 1,4 миллиарда перестановок? Вы действительно, действительно уверены? – TigerhawkT3

+0

yes im sure haha ​​ – AKcoArts

+0

Сколько времени занимает 1,3 м? Если вы измените код только на '. '.join (s)', не распечатывая его, он по-прежнему падает после этого количества времени? Кроме того, вам не нужно импортировать 'itertools' в два пространства имен - я бы просто придерживался первого (который вы используете) и избавился от' from itertools import * '. – TigerhawkT3

ответ

0

Код, который вы указали, не является кодом, который вы используете. Например, этот сегмент не может вести себя, как вы описываете:

for x in range(2): 
    for s in itertools.product(all, repeat=x): 
     print(''.join(s)) 

Это должно отображать декартово произведение для членов всех при двух условиях:

  • когда х 0
  • , когда х 1

Когда x равно нулю itertools.product(any_list_at_all, repeat=0) имеет только одну комбинацию нулевых элементов, которая является пустым множеством. Когда z равно единице, количество комбинаций равно длине входного списка. В вашем случае это составляет len(all) комбинаций из 36 символов, взятых по 1 за раз, что составляет 36 наборов.

Так как в декартовом произведении мощность выходного множества является произведением мощностей входного множества (для конечных множеств), то это означает, что product(all, range=6) возвратит около 2,2 млрд. Наборов, поэтому, где 1,4 млрд. ?

+0

Возможно 36 * 35 * 34 * 33 * 32 * 31 (= 1,402,410,240). –

+0

Он говорит * «1.4billion перестановки» *. –

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