Python中split()函数的行为疑问:为何不同字符串分割结果存在空值差异?
理解Python中
str.split()的分割行为 我来帮你拆解这个疑惑——Python的str.split()方法在处理分隔符时,是按照「分隔符将字符串切割成分隔符前后的所有片段」来工作的,哪怕某些片段是空的,只要分隔符的位置对应了这样的片段,就会被保留下来。
我们逐个分析你的例子:
1. 变量a的情况:a = "1)2",执行a.split(")")
这个字符串的结构是:"1" + ")" + "2"。当用")"作为分隔符切割时,分隔符把字符串分成了分隔符前面的"1"和分隔符后面的"2",这两个片段都是非空的,所以结果就是['1', '2'],长度为2。
2. 变量b的情况:b = ")",执行b.split(")")
这个字符串本身就是一个分隔符,它的结构可以看作:空字符串 + ")" + 空字符串——因为分隔符的前面没有任何字符,后面也没有任何字符。当用")"切割时,split方法会把这两个空片段都保留下来,所以结果就是['', ''],长度同样为2。
举几个额外的例子帮你巩固理解:
- 如果字符串是
")a)",split(")")会得到['', 'a', ''](分隔符前的空片段、中间的a、分隔符后的空片段) - 如果字符串是
"a))b",split(")")会得到['a', '', 'b'](两个连续分隔符之间的空片段) - 如果字符串是
"abc"(不含分隔符),split(")")会得到['abc'](仅保留原字符串一个片段)
简单总结:split会保留分隔符对应的所有前后片段,不管是不是空字符串——只有当分隔符不在字符串中时,才会返回仅包含原字符串的列表;如果分隔符在开头、结尾或者连续出现,就会产生空字符串片段。
内容的提问来源于stack exchange,提问作者OnePiece
相关产品推荐
相关产品推荐

