На данный момент я пытаюсь выполнить strip() в списке строк, и я сделал это:
i = 0
for j in alist:
alist[i] = j.strip()
i+=1
Есть ли лучший способ сделать это?
На данный момент я пытаюсь выполнить strip() в списке строк, и я сделал это:
i = 0
for j in alist:
alist[i] = j.strip()
i+=1
Есть ли лучший способ сделать это?
Вероятно, вы не должны использовать list
как имя переменной, так как это тип. Вне зависимости:
list = map(str.strip, list)
Это применит функцию str.strip
к каждому элементу в list
, вернет новый список и сохранит результат в list
.
Вы можете использовать методы списка
stripped_list = [j.strip() for j in initial_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.split)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