有没有更好的方法在字符串列表上使用strip()? - 蟒蛇

alv*_*vas 19 python string iterator list strip

现在我一直在尝试在字符串列表上执行strip(),我这样做了:

i = 0
for j in alist:
    alist[i] = j.strip()
    i+=1
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

edu*_*ffy 31

您可能不应该将其list用作变量名称,因为它是一种类型.而不管:

list = map(str.strip, list) 
Run Code Online (Sandbox Code Playgroud)

这将把函数str.strip应用于每个元素list,返回一个新列表,并将结果存回list.

  • "map"是一个很好的选择.(`itertools.imap`可能会或可能不会更好,当然,例如在分配给切片时). (2认同)

kar*_*ikr 18

您可以使用列表推导

stripped_list = [j.strip() for j in initial_list]
Run Code Online (Sandbox Code Playgroud)


Kos*_*Kos 9

关于性能的一些有趣的讨论发生在这里,所以让我提供一个基准:

http://ideone.com/ldId8

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
Run Code Online (Sandbox Code Playgroud)

所以:

  1. map(str.strip, my_list) 是最快的方式,它只是比comperhensions快一点.
    • 使用map或者itertools.imap是否有一个你想要应用的函数(比如str.split)
    • 如果有更复杂的表达,请使用理解
  2. 手动迭代是最慢的方式; 一个合理的解释是它需要解释器做更多的工作,而高效的C运行时会做得更少
  3. 继续并分配结果my_list[:] = map...,切片表示法只引入一小部分开销,如果有多个对该列表的引用,可能会给你一些错误.
    • 了解改变列表和重新创建列表之间的区别.