python 拆分而不创建空白

2024-04-30

我明白为什么使用 split 创建空白很重要,这要归功于这个问题 https://stackoverflow.com/questions/2197451/why-are-empty-strings-returned-in-split-results,但有时又不能去抢。

假设您解析了一些 css 并得到了以下字符串:

s1 = 'background-color:#000;color:#fff;border:1px #ccc dotted;'
s2 = 'color:#000;background-color:#fff;border:1px #333 dotted'

即使字符串末尾缺少分号,两者都是有效的 css。分割字符串时,您会得到以下结果:

>>> s1.split(';')
['background-color:#000', 'color:#fff', 'border:1px #ccc dotted', '']
>>> s2.split(';')
['color:#000', 'background-color:#fff', 'border:1px #333 dotted']

该额外的分号会在列表中创建一个空白项。现在,如果我想进一步操作,我需要测试每个列表的开头和结尾,如果它们是空白,则将其删除,这并不是那么糟糕,但似乎是可以避免的。

问题:

有没有一种方法本质上与split但不包括尾随空白项?或者有没有一种简单的方法可以像字符串一样删除它们strip删除尾随空白


只需使用以下命令删除项目即可None filter:

filter(None, s1.split(';'))

Demo:

>>> s1 = 'background-color:#000;color:#fff;border:1px #ccc dotted;'
>>> filter(None, s1.split(';'))
['background-color:#000', 'color:#fff', 'border:1px #ccc dotted']

Calling filter() with None删除所有“空”或数字 0 项;任何在布尔上下文中计算结果为 false 的内容。

filter(None, ....)早餐的吃列表理解:

>>> import timeit
>>> timeit.timeit('filter(None, a)', "a = [1, 2, 3, None, 4, 'five', ''] * 100")
9.410392045974731
>>> timeit.timeit('[i for i in a if i]', "a = [1, 2, 3, None, 4, 'five', ''] * 100")
44.9318630695343
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 拆分而不创建空白 的相关文章

随机推荐