Есть ли лучший способ использовать strip () в списке строк? - python [дубликат]
этот вопрос уже есть ответ здесь:
- Strip все элементы списка строк 5 ответов
пока я пытался выполнить strip () в списке строк, и я сделал это:
i = 0
for j in alist:
alist[i] = j.strip()
i+=1
есть ли лучший способ сделать это?
4 ответов
вы, вероятно, не должны использовать list
в имя переменной, так как это тип. Независимо:
list = map(str.strip, list)
это будет применять функцию str.strip
для каждого элемента в list
, верните новый список и сохраните результат в list
.
некоторые интригующие обсуждения производительности произошли здесь, поэтому позвольте мне предоставить эталон:
noslice_map : 0.0814900398254
slice_map : 0.084676027298
noslice_comprehension : 0.0927240848541
slice_comprehension : 0.124806165695
iter_manual : 0.133514881134
iter_enumerate : 0.142778873444
iter_range : 0.160353899002
так:
-
map(str.strip, my_list)
Это самый быстрый способ, это просто немного быстрее, чем comperhensions.- использовать
map
илиitertools.imap
Если есть одна функция, которую вы хотите применить (например, str.сплит) - используйте понимания, если есть более сложный выражение
- использовать
- ручная итерация-самый медленный способ; разумное объяснение заключается в том, что для интерпретатора требуется больше работы, а эффективная среда выполнения C делает меньше
- вперед и назначить результат, как
my_list[:] = map...
, нотация среза вводит только небольшие накладные расходы и, вероятно, избавит вас от некоторых ошибок, если есть несколько ссылок на этот список.- знайте разницу между мутированием списка и повторным созданием он.
Я думаю, вы имеете в виду
a_list = [s.strip() for s in a_list]
использование выражения генератора может быть лучшим подходом, например:
stripped_list = (s.strip() for s in a_list)
предлагает преимущество ленивой оценки, поэтому strip
запускается только тогда, когда данный элемент, разделенный, необходим.
если вам нужны ссылки на список, чтобы оставаться нетронутыми вне текущей области, вы можете использовать синтаксис среза списка.:
a_list[:] = [s.strip() for s in a_list]
для комментаторов, заинтересованных в скорости различных подходов, это выглядит так, как будто в CPython подход "генератор-срез" наименее эффективен:
>>> from timeit import timeit as t
>>> t("""a[:]=(s.strip() for s in a)""", """a=[" %d " % s for s in range(10)]""")
4.35184121131897
>>> t("""a[:]=[s.strip() for s in a]""", """a=[" %d " % s for s in range(10)]""")
2.9129951000213623
>>> t("""a=[s.strip() for s in a]""", """a=[" %d " % s for s in range(10)]""")
2.47947096824646