Повысить скорость объединения списков? - PullRequest
1 голос
/ 29 июля 2011

У меня есть список с именем L внутри цикла, который должен повторять миллионы строк. Существенные особенности:

for line in lines:
    L = ['a', 'list', 'with', 'lots', 'of', 'items']
    L[3] = 'prefix_text_to_item3' + L[3]
    Do more stuff with L...

Есть ли лучший подход для добавления текста в элемент списка, который ускорил бы мой код. Можно ли использовать .join? Спасибо.

Ответы [ 4 ]

2 голосов
/ 29 июля 2011

В коде, ориентированном на производительность, не рекомендуется добавлять 2 строки вместе, вместо этого предпочтительнее использовать "".join(_items2join_).(Я нашел там несколько тестов: http://www.skymind.com/~ocrow/python_string/)

1 голос
/ 29 июля 2011

На самом деле не создавать объекты списка.

Использовать функции генератора и выражения генератора.

def appender( some_list, some_text ):
    for item in some_list:
        yield item + some_text

Эта функция appender фактически не создает новый список.Это позволяет избежать некоторых накладных расходов на управление памятью, связанных с созданием нового списка.

1 голос
/ 29 июля 2011

Поскольку доступ к элементу в списке Python - это O (1), а добавление списка к другому - O (1) (что, вероятно, является временной сложностью объединения строк в Python), предоставленный вами код выполняется как насколько это возможно, насколько я могу судить. :) Вы, вероятно, не можете позволить себе это сделать, но когда мне нужна скорость, я перехожу на C ++ или другой компилируемый язык, когда мне нужно обработать столько информации. Вещи бегут намного быстрее. По поводу временной сложности операций со списками в python вы можете обратиться на этот веб-сайт: http://wiki.python.org/moin/TimeComplexity и здесь: Какова сложность времени выполнения функций списка Python?

0 голосов
/ 30 июля 2011

Может быть лучший подход в зависимости от того, что вы делаете со списком L.

Например, если вы печатаете его, что-то вроде этого может быть быстрее.

печать "{0} {1} {2} {3} {4} {5}". Формат (L [0], L [1], L [2], 'prefix_text_to_item3', L [3] , L [4])

Что происходит с L позже в программе?

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