Python拆分函数行为


a = "1)2"
b = ")"
a = a.split(")")
b = b.split(")")
print(a, len(a), b, len(b))

返回
['1', '2'] 2 ['', ''] 2
我觉得这种行为很奇怪。为什么只返回b而不返回a的空白?

正如其他人指出的那样,str.split的记录行为解释了您的结果。由于您将sep指定为')',split查找围绕它的字符串,并且在')'的情况下,查找恰好2个空字符串(而不是)。空格)。在'1)2'的例子中,split找到2个非空字符串('1''2')。注意,这种行为可以扩展到其他类似的情况,见下文。如您所见,当sep提供split时,如果sep连续出现,或者出现在字符串的开头或结尾,则返回空字符串。

lst = ['1', ')', '1)', ')2', '1)2', '1)2)', '))', ')1)2)']
for s in lst:
s_split = s.split(')')
print(f'"{s}" is split intot{len(s_split)} element(s):t', s_split)

打印:

"1" is split into       1 element(s):    ['1']
")" is split into       2 element(s):    ['', '']
"1)" is split into      2 element(s):    ['1', '']
")2" is split into      2 element(s):    ['', '2']
"1)2" is split into     2 element(s):    ['1', '2']
"1)2)" is split into    3 element(s):    ['1', '2', '']
"))" is split into      3 element(s):    ['', '', '']
")1)2)" is split into   4 element(s):    ['', '1', '2', '']

这是因为在第一种情况下(在索引1处遇到),所以split方法的结果将是[a[0:1],a[2:]]

而在第一种情况下(在索引0处遇到所以split将返回[a[0:0],a[0:]]

如果您仍然感到困惑,可以考虑字符串s = "(12(3(">

)在3个索引0处遇到,35所以split方法返回[s]0:0], s [0+ 1:3], s [35 + 1:5), s [+ 1:]]

注意:第一个和最后一个元素应该是s[0][j]和[j:-1)分别

最新更新