В настоящее время я работаю с генераторами и факториалами в python. В качестве примера: itertools.permutations(range(100))
Значение, я получаю объект генератора , содержащий 100! значений.
На самом деле этот код выглядит немного сложнее; Я использую список подсписков вместо диапазона (100), чтобы найти комбинацию подсписков, отвечающих моим условиям.
Это код:
mylist = [[0, 0, 1], ..., [5, 7, 3]] # random numbers
x = True in (combination for combination in itertools.permutations(mylist)
if compare(combination))
# Compare() does return True for one or a few combination in that generator
I понял, что это очень много времени. Есть ли более эффективный способ сделать это, и, кроме того, способ вычислить, сколько времени это займет?
Я сделал несколько% времени, используя i python:
%timeit (combination for combination in itertools.permutations(mylist) if compare(combination))
--> 697 ns
%timeit (combination for combination in itertools.permutations(range(100)) if compare(combination))
--> 572 ns
Примечание: Я понимаю, что генератор только создается, когда он «потребляется», то есть понимание генератора должно быть выполняется сначала, чтобы вообще запустить самого себя.
Я видел много уроков, объясняющих, как работают генераторы, но я ничего не нашел о времени выполнения. Более того, мне не нужно точное значение, такое как время выполнения, используя модуль времени в моей программе, поэтому мне нужно приблизительное значение перед выполнением.
Редактировать: Я также проверил это для меньшего количества значений , для списка, содержащего 24 подсписка, 10 подсписков и 5 подсписков. При этом я получаю мгновенный вывод . Это означает, что программа работает, это всего лишь вопрос времени.
Моя проблема (сказано более прояснено): Сколько времени это собирается возьмите и: есть ли менее трудоемкий способ сделать это?