很抱歉标题很混乱,但是用一行字来描述这个问题有点难。所以我有一个列表如下:
['','','','A','','','B','','C','','D','','','']
我想得到这样的东西:
['A','','','B','C','D']
过程:
1删除所有开始和结束的空字符串(A之前和D之后的字符串)。
2删除被非空字符串(如B&C和C&D之间的字符串)夹在中间的单个空字符串。但是,如果有1个以上的空字符串夹在中间,请保留它们(如A和B之间的2个字符串)。你知道吗
有人能帮我解决这个问题吗?事先非常感谢!你知道吗
Tags:
这不是一个在所有情况下都适用的答案,但是如果您能够识别出列表中不存在的字符,则该答案将有效。一般的想法是加入列表、剥离、替换元素的单个运行,然后在元素上拆分:
设置
将其包装在函数中并断言
el
元素有效:要分解这一点:
正则表达式解释
替换是关键,因为它允许替换一行中的两个
@
(表示列表中只存在一个空字符串的位置)。但是,您必须小心不要在另一个运行的@
中替换一行中的两个@
(例如,如果一行中有两个空字符串)。这里的关键是消极的向前看/向后看。你知道吗这里有一个可能的解决方案。您可以使用
itertools.groupby
来标识相同字符串的运行,并计算一行中出现的字符串数:然后删除第一个和最后一个元素(如果它们是空字符串):
然后移除由一个空字符串组成的任何内部组:
然后重新定位到一个单一的名单运行。你知道吗
相关问题 更多 >
编程相关推荐