i******r 发帖数: 323 | 1 重新写一下问题吧:
默认的split,可以把split出来多余的空字串去掉
>>> 'a\n\nb'.split()
['a', 'b']
但是我手工设定了delimiter之后,就会有多余的空字串了
>>> 'a\n\nb'.split('\n')
['a', '', 'b']
>>>
这个咋回事,谁给我解解惑? |
r****t 发帖数: 10904 | 2 In [12]: "a b".split(' ')
Out[12]: ['a', 'b']
我这里是默认的效果,你那个很奇怪。
delimiter
【在 i******r 的大作中提到】 : 重新写一下问题吧: : 默认的split,可以把split出来多余的空字串去掉 : >>> 'a\n\nb'.split() : ['a', 'b'] : 但是我手工设定了delimiter之后,就会有多余的空字串了 : >>> 'a\n\nb'.split('\n') : ['a', '', 'b'] : >>> : 这个咋回事,谁给我解解惑?
|
i******r 发帖数: 323 | 3 不好意思,原来贴空格有问题
重新编辑了一下
见原帖
【在 r****t 的大作中提到】 : In [12]: "a b".split(' ') : Out[12]: ['a', 'b'] : 我这里是默认的效果,你那个很奇怪。 : : delimiter
|
r****t 发帖数: 10904 | |
i******r 发帖数: 323 | 5 这个运行出来的list里面还是很多空字串啊
>>> t = string.maketrans('_',' ')
>>> s = "a______b".translate(t)
>>> s
'a b'
>>> s.split(' ')
['a', '', '', '', '', '', 'b'] |
i******r 发帖数: 323 | 6 我不理解默认的split是用什么参数运行的
【在 r****t 的大作中提到】 : 默认的不是 split 的好好的么?
|
r****t 发帖数: 10904 | 7 a.split?
Type: builtin_function_or_method
Base Class:
String Form:
Namespace: Interactive
Docstring:
S.split([sep [,maxsplit]]) -> list of strings
Return a list of the words in the string S, using sep as the
delimiter string. If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator |
r****t 发帖数: 10904 | 8
can't u just s.split()?
【在 i******r 的大作中提到】 : 这个运行出来的list里面还是很多空字串啊 : >>> t = string.maketrans('_',' ') : >>> s = "a______b".translate(t) : >>> s : 'a b' : >>> s.split(' ') : ['a', '', '', '', '', '', 'b']
|
i******r 发帖数: 323 | 9 Yes s.split() works perfectly fine
I am just curious why s.split(' ') is different from s.split()
【在 r****t 的大作中提到】 : : can't u just s.split()?
|
e*n 发帖数: 1511 | 10 缺省没有参数调用的,跳过所有的whitespace.
从python源码看上去是用了c里面的 isspace 函数。
你的问题可以作类似处理,就是自己定义一个函数,把所有你要得东西都替换到一个同
样的字符,然后再用split.
【在 i******r 的大作中提到】 : Yes s.split() works perfectly fine : I am just curious why s.split(' ') is different from s.split()
|
|
|
w****i 发帖数: 964 | 11 that will still generate empty strings
【在 e*n 的大作中提到】 : 缺省没有参数调用的,跳过所有的whitespace. : 从python源码看上去是用了c里面的 isspace 函数。 : 你的问题可以作类似处理,就是自己定义一个函数,把所有你要得东西都替换到一个同 : 样的字符,然后再用split.
|
i******r 发帖数: 323 | 12 I see
thanks
我原来好奇split是怎么区分user是否给出一个参数的
看了doc string知道了
split的默认参数是None
s.split(None)就可以达到同样的效果
【在 e*n 的大作中提到】 : 缺省没有参数调用的,跳过所有的whitespace. : 从python源码看上去是用了c里面的 isspace 函数。 : 你的问题可以作类似处理,就是自己定义一个函数,把所有你要得东西都替换到一个同 : 样的字符,然后再用split.
|
i******r 发帖数: 323 | 13 right
>>> 'baaaaaac'.split('a')
['b', '', '', '', '', '', 'c']
>>> [x for x in 'baaaaaac'.split('a') if x]
['b', 'c']
【在 w****i 的大作中提到】 : that will still generate empty strings
|
e*n 发帖数: 1511 | 14 再filter一下不久好了。
【在 w****i 的大作中提到】 : that will still generate empty strings
|
r****t 发帖数: 10904 | 15 if x 太含蓄了,我再贴正确办法吧
>>> t = string.maketrans('a',' ')
>>> s = "baaaaaac".translate(t)
>>> s.split() |
e*n 发帖数: 1511 | 16 这个translate老忘,还是在python challenge里面第一次看呢。
他还有一个潜在问题,就是多个模式匹配的时候,如果模式有overlap会有问题。
【在 r****t 的大作中提到】 : if x 太含蓄了,我再贴正确办法吧 : >>> t = string.maketrans('a',' ') : >>> s = "baaaaaac".translate(t) : >>> s.split()
|