Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何折叠连续分隔符?_Python_String_Split - Fatal编程技术网

Python 如何折叠连续分隔符?

Python 如何折叠连续分隔符?,python,string,split,Python,String,Split,Python中的默认split方法将连续空格视为单个分隔符。但如果指定分隔符字符串,则连续分隔符不会折叠: >>> 'aaa'.split('a') ['', '', '', ''] 折叠连续分隔符最直接的方法是什么?我知道我可以从结果列表中删除空字符串: >>> result = 'aaa'.split('a') >>> result ['', '', '', ''] >>> result = [item for ite

Python中的默认
split
方法将连续空格视为单个分隔符。但如果指定分隔符字符串,则连续分隔符不会折叠:

>>> 'aaa'.split('a')
['', '', '', '']
折叠连续分隔符最直接的方法是什么?我知道我可以从结果列表中删除空字符串:

>>> result = 'aaa'.split('a')
>>> result
['', '', '', '']
>>> result = [item for item in result if item]

但是还有更方便的方法吗?

您可以使用正则表达式:

re.split(pattern, string[, maxsplit=0, flags=0])
string = 'aaa'
result = re.split('a+', string)
作为

可以与正则表达式一起使用作为分隔符,如中所示:

re.split(pattern, string[, maxsplit=0, flags=0])

不,没有比这更方便的方法了。要么编写自己的拆分函数,要么删除空字符串


但是,您的解决方案看起来非常清晰和通俗。

尽管它并不完全符合您的要求,但您可以通过使用
集合来消除所有非唯一令牌:

>>> result
['', '', '']
>>> set(result)
set([''])

这是你能得到的最简洁的信息:

string = 'aaa'
result = [s for s in string.split('a') if s]
或者您可以切换到正则表达式:

re.split(pattern, string[, maxsplit=0, flags=0])
string = 'aaa'
result = re.split('a+', string)

我认为你的解决方案完全可以。这里有一个等价的:

filter(bool, 'aaa'.split('a'))

不过,可能没有列表理解那么清晰。

似乎可以通过
re.split
实现这一点!我没有意识到没有参数的
split()
所做的事情无法通过带有参数的
split
进行复制,如果需要的话。很抱歉,这个解决方案非常糟糕。另外,过滤器在python3中发生了更改,并且不会产生相同的结果。您可以详细说明为什么它不好(除了我不知道它在python3中的行为发生了更改之外)?因为您正在向bool(开销)添加函数调用,使其可读性降低。
filter
在python3中返回一个迭代器(与列表相反)―它使用的内存更少。@Franklin我明确地提到,它的可读性可能不如列表理解,但我看到了关于开销的要点。谢谢你指出这一点。很好的解决方案!模式
a+
将尽可能被最连续的
a
分割。因此,通过运行
re.split('a+',string)
它将返回
['',]
。假设
string='baaac'
那么它将返回
['b','c']
。我将它再放入一个中以去除任何人工制品:
s=[s2 for s2 in[s.strip()for s in linkObj.getText().split('')if s]if s2]