我有一些python代码,分隔逗号,但不剥离空白:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots ', ' of ', ' spaces', ' here ']
我宁愿最后像这样删除空白:
['blah', 'lots', 'of', 'spaces', 'here']
我知道我可以循环遍历列表并strip()每个项,但由于这是Python,我猜有一种更快、更简单和更优雅的方式来完成它。
我是来补充的:
map(str.strip, string.split(','))
但我看到杰森·奥伦多夫在一条评论中提到了它。
格伦·梅纳德(Glenn Maynard)对同一答案的评论建议在地图上使用列表理解,我开始想知道为什么。我以为他指的是表演方面的原因,但当然,他可能是指风格方面的原因,或者其他什么(格伦?)
因此,在我的盒子(Python 2.6.5 on Ubuntu 10.04)上进行了一个快速(可能有缺陷?)测试,在循环中应用这三个方法:
$ time ./list_comprehension.py # [word.strip() for word in string.split(',')]
real 0m22.876s
$ time ./map_with_lambda.py # map(lambda s: s.strip(), string.split(','))
real 0m25.736s
$ time ./map_with_str.strip.py # map(str.strip, string.split(','))
real 0m19.428s
制作地图(str。Strip, string.split(','))是赢家,尽管看起来它们都在同一个球场上。
当然,尽管map(带或不带lambda)不应该因为性能原因被排除,对我来说,它至少和列表理解一样清楚。
使用列表推导式——更简单,和for循环一样易于阅读。
my_string = "blah, lots , of , spaces, here "
result = [x.strip() for x in my_string.split(',')]
# result is ["blah", "lots", "of", "spaces", "here"]
参见:Python文档中的列表理解
一个很好的2秒列表理解的解释。