Redian新闻
>
问一个python的string split问题
avatar
问一个python的string split问题# Programming - 葵花宝典
i*r
1
重新写一下问题吧:
默认的split,可以把split出来多余的空字串去掉
>>> 'a\n\nb'.split()
['a', 'b']
但是我手工设定了delimiter之后,就会有多余的空字串了
>>> 'a\n\nb'.split('\n')
['a', '', 'b']
>>>
这个咋回事,谁给我解解惑?
avatar
r*t
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']
: >>>
: 这个咋回事,谁给我解解惑?

avatar
i*r
3
不好意思,原来贴空格有问题
重新编辑了一下
见原帖

【在 r****t 的大作中提到】
: In [12]: "a b".split(' ')
: Out[12]: ['a', 'b']
: 我这里是默认的效果,你那个很奇怪。
:
: delimiter

avatar
r*t
4
默认的不是 split 的好好的么?
avatar
i*r
5
这个运行出来的list里面还是很多空字串啊
>>> t = string.maketrans('_',' ')
>>> s = "a______b".translate(t)
>>> s
'a b'
>>> s.split(' ')
['a', '', '', '', '', '', 'b']
avatar
i*r
6
我不理解默认的split是用什么参数运行的

【在 r****t 的大作中提到】
: 默认的不是 split 的好好的么?
avatar
r*t
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
avatar
r*t
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']

avatar
i*r
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()?

avatar
e*n
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()

avatar
w*i
11
that will still generate empty strings

【在 e*n 的大作中提到】
: 缺省没有参数调用的,跳过所有的whitespace.
: 从python源码看上去是用了c里面的 isspace 函数。
: 你的问题可以作类似处理,就是自己定义一个函数,把所有你要得东西都替换到一个同
: 样的字符,然后再用split.

avatar
i*r
12
I see
thanks
我原来好奇split是怎么区分user是否给出一个参数的
看了doc string知道了
split的默认参数是None
s.split(None)就可以达到同样的效果

【在 e*n 的大作中提到】
: 缺省没有参数调用的,跳过所有的whitespace.
: 从python源码看上去是用了c里面的 isspace 函数。
: 你的问题可以作类似处理,就是自己定义一个函数,把所有你要得东西都替换到一个同
: 样的字符,然后再用split.

avatar
i*r
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
avatar
e*n
14
再filter一下不久好了。

【在 w****i 的大作中提到】
: that will still generate empty strings
avatar
r*t
15
if x 太含蓄了,我再贴正确办法吧
>>> t = string.maketrans('a',' ')
>>> s = "baaaaaac".translate(t)
>>> s.split()
avatar
e*n
16
这个translate老忘,还是在python challenge里面第一次看呢。
他还有一个潜在问题,就是多个模式匹配的时候,如果模式有overlap会有问题。

【在 r****t 的大作中提到】
: if x 太含蓄了,我再贴正确办法吧
: >>> t = string.maketrans('a',' ')
: >>> s = "baaaaaac".translate(t)
: >>> s.split()

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。