現在我一直在試圖字符串列表執行帶(),我這樣做:有沒有更好的方法來使用字符串列表上的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
。
我想你的意思
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
上表現了一些有趣的討論發生在這裏,所以讓我提供一個基準:
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)
是最快的方法,它只是有點快比coperhensions。
map
或itertools.imap
如果有,你要應用(如str.split)my_list[:] = map...
,切片標誌只介紹一個小的開銷,並有可能如果要饒你一些錯誤存在是對該列表的多個引用。
Upvoting for random anonymous uncommented downvote。如果問題出現問題,在沒有告訴作者什麼的情況下,完全沒有意義。 – KRyan
@DragoonWraith聽到,聽到。 – chucksmash
如果你想迭代使用索引,在枚舉(alist)' – Kos