Более быстрый / эффективный способ запуска большого числа для цикла - PullRequest
0 голосов
/ 12 мая 2019

Я хотел бы запустить функцию для генерации термометрических кодов внутри списка.при вводе большого диапазона функции отнимают много времени -

    def Thermo_Only(bit_size):
        lst=[]
        code=0
        for bit in xrange(bit_size):
            lst.append(code)
            code = code*8+7
        return(lst)

при вводе 0x3ffff. Я получаю MemoryError с помощью Pyscripter.*

 code = code*8+7 

правильно ...

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

У вас не должно быть проблем с памятью с вашим кодом в Python 3. Я попробовал его (изменив xrange() на range()) и получил ответ через 12 секунд.

Вы можете написать функцию следующим образом:

def Thermo_Only(n): 
    return [ (1<<i)-1 for i in range(0,3*n,3) ]

Это фактически позволяет вам вообще не создавать список. если вы собираетесь поместить результат в массив:

thermoArray = Thermo_Only(n)

вы можете просто создать вместо нее функцию и использовать ее так, как если бы вы ссылались на индексы в вашем массиве:

def thermoArray(n): return (1<<(3*n))-1

и используйте thermoArray(i) вместо thermoArray[i] в своем коде.

0 голосов
/ 12 мая 2019

Использование xrange и списочного понимания действительно уменьшило медлительность цикла for. Я также уменьшил максимальное значение до 0x3fff, что, похоже, дает мне все необходимые значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...