Rya*_*axe 0 python string split
我理解为什么使用拆分创建空白很重要,这要归功于这个问题,但有时候有必要不抓住它们.
假设你解析了一些css并获得了以下字符串:
s1 = 'background-color:#000;color:#fff;border:1px #ccc dotted;'
s2 = 'color:#000;background-color:#fff;border:1px #333 dotted'
Run Code Online (Sandbox Code Playgroud)
两者都是有效的CSS,即使字符串末尾缺少分号.拆分字符串时,您会得到以下内容:
>>> s1.split(';')
['background-color:#000', 'color:#fff', 'border:1px #ccc dotted', '']
>>> s2.split(';')
['color:#000', 'background-color:#fff', 'border:1px #333 dotted']
Run Code Online (Sandbox Code Playgroud)
额外的分号在列表中创建一个空白项.现在,如果我想进一步操作,我需要测试每个列表的开头和结尾,如果它们是空白的话就删除它们,这不是那么糟糕,但似乎可以避免.
是否有一个方法基本上相同split但不包括尾随空白项目?或者只是一种方法来删除那些就像字符串必须strip删除尾随空格
只需使用None过滤器删除项目:
filter(None, s1.split(';'))
Run Code Online (Sandbox Code Playgroud)
演示:
>>> s1 = 'background-color:#000;color:#fff;border:1px #ccc dotted;'
>>> filter(None, s1.split(';'))
['background-color:#000', 'color:#fff', 'border:1px #ccc dotted']
Run Code Online (Sandbox Code Playgroud)
调用filter()与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
Run Code Online (Sandbox Code Playgroud)
您可以使用列表推导来过滤掉空字符串,因为会考虑空字符串False:
>>> s1 = 'background-color:#000;color:#fff;border:1px #ccc dotted;'
>>> [i for i in s1.split(';') if i]
['background-color:#000', 'color:#fff', 'border:1px #ccc dotted']
Run Code Online (Sandbox Code Playgroud)
或者,您可以先rstrip()使用分号:
>>> s1.rstrip(';').split(';')
['background-color:#000', 'color:#fff', 'border:1px #ccc dotted']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |