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处遇到,3和5所以split方法返回[s]0:0], s [0+ 1:3], s [35 + 1:5), s [+ 1:]]
注意:第一个和最后一个元素应该是s[0][j]和[j:-1)分别