我有一些python代码分裂逗号,但不剥离空格:
>>> string = "blah, lots , of , spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots ', ' of ', ' spaces', ' here ']
我宁愿最终删除这样的空格:
['blah', 'lots', 'of', 'spaces', 'here']
我知道我可以遍历列表和strip()每个项目,但是,因为这是Python,我猜测有更快,更简单,更优雅的方式 .
11 回答
简单地说,逗号或至少一个带/不带前/后空格的空格 .
请试试!
map(lambda s: s.strip(), mylist)
会比显式循环好一点 .或者对于整个事情:
这基本上就是你需要的一切 .
使用列表理解 - 更简单,就像
for
循环一样容易阅读 .See: Python docs on List Comprehension
A good 2 second explanation of list comprehension.
使用正则表达式拆分 . 注意我使用前导空格使案例更加通用 . 列表理解是删除前面和后面的空字符串 .
即使
^\s+
不匹配,这也有效:这就是你需要^ \ s的原因:
看到blah的领先空间?
澄清:上面使用Python 3解释器,但结果在Python 2中是相同的 .
我来补充一下:
map(str.strip, string.split(','))
但是看到Jason Orendorff在a comment已经提到了它 .
阅读格伦梅纳德在同一个答案中的评论,表明对 Map 的列表理解我开始想知道为什么 . 我认为他的出于性能原因,但当然他可能是出于文体原因或其他原因(格伦?) .
所以在我的盒子上应用这三种方法的快速(可能有缺陷的?)测试显示:
让
map(str.strip, string.split(','))
成为赢家,虽然看起来他们都在同一个球场 .当然,虽然出于性能原因,不一定要排除map(有或没有lambda),对我而言,它至少与列表理解一样清楚 .
编辑:
Ubuntu 10.04上的Python 2.6.5
我知道这已经得到了回答,但是如果你结束这么做,正则表达式可能是一个更好的方法:
\s
匹配任何空格字符,我们只需用空字符串''
替换它 . 你可以在这里找到更多信息:http://docs.python.org/library/re.html#re.sub在拆分之前,只需从字符串中删除空格 .
这对我来说很好 .
re
(与正则表达式中一样)允许一次拆分多个字符:这对于您的示例字符串不起作用,但适用于以逗号空间分隔的列表 . 对于您的示例字符串,您可以将re.split功能组合在正则表达式模式上进行拆分以获得"split-on-this-or-that"效果 .
不幸的是,这很难看,但是
filter
会做到这一点:瞧!
map(lambda s: s.strip(), mylist)
会比显式循环好一点 . 或者对于整个事情:map(lambda s:s.strip(), string.split(','))