对于没有参数的情况,如何实现str.split
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于没有参数的情况,如何实现str.split相关的知识,希望对你有一定的参考价值。
没有给出分隔符时,Python是否使用正则表达式拆分?
我看不到str.__file__
,在这里other solutions work也没有,因为split
是str
类型的函数(尽管它是内置的)。
例如'a b' --> ['a', 'b']
背景我正在考虑用多个空格替换所有相邻的空格,这些空格对性能至关重要的许多文件,尽管我想知道正则表达式的分割是否会足够快:也许内置显示了更好的方法。
首先,str
内置在python中,这意味着要查看str.split
的源代码,您必须深入研究定义它的C source code。
现在,进入您的实际问题。我觉得re.sub
不仅会过分使用,而且会比使用内置的str.split慢(完全公开:我没有时间数据来支持这一点-这只是我的一种感觉)。
现在,str.split
默认情况下在空格上分割(它使用一个optional参数,该参数可用于指定要在其上分割的字符)。它还会分割任意数量的连续空白字符。现在,这意味着如果您的字符串中包含空格字符,则对该字符串调用str.split
将返回一个非空子字符串列表,这些子字符串都不包含任何空格。因此,如果您的字符串具有异构的连续空白字符,则这些空白字符将被彼此区别对待。
以下是几个示例:
In [31]: s = 'hello world' # one space
In [32]: s.split()
Out[32]: ['hello', 'world']
In [33]: s = 'hello world' # multiple consecutive whitespace characters
In [34]: s.split()
Out[34]: ['hello', 'world']
In [35]: s = 'hello world' # a different whitespace character
In [36]: s.split()
Out[36]: ['hello', 'world']
In [37]: s = 'hello world' # multiple consecutive tab characters
In [38]: s.split()
Out[38]: ['hello', 'world']
In [39]: s = 'hello world' # multiple consecutive space characters
In [40]: s.split()
Out[40]: ['hello', 'world']
如您所见,空格的存在并不重要-当“至少一个空格字符”出现时,考虑str.split
拆分。
现在,如果要用一个空格替换所有连续的空白字符,可以用str.split
和str.join
:
In [41]: ' '.join(['hello', 'world']) # join the strings 'hello' and 'world' with a space between them
Out[41]: 'hello world'
In [42]: s = 'hello world' # notice two spaces between 'hello' and 'world'
In [43]: ' '.join(s.split())
Out[43]: 'hello world' # notice only one space between 'hello' and 'world'
它不使用正则表达式,它使用<wctypes.h>
的iswspace(...)
我们可以在这里看到它使用了宏STRINGLIB_ISSPACE(...)https://github.com/certik/python-3.3/blob/master/Objects/stringlib/split.h
这里定义为wctypes.h的iswspace:http://svn.python.org/projects/python/trunk/Include/unicodeobject.h
以上是关于对于没有参数的情况,如何实现str.split的主要内容,如果未能解决你的问题,请参考以下文章