为何Python的splitlines()处理连续换行符时会多出空列表项?
问题原因解释
首先明确Python str.splitlines() 方法的核心拆分规则:
- 行终止符会被作为拆分边界,其中
\r\n会被识别为单个整体行终止符,不会拆分为两个独立的拆分边界 - 两个相邻的行终止符之间如果不存在任何内容,拆分后会生成空字符串元素
第一个测试用例逻辑
你第一个测试用例的字符串为 'Milk\nChicken\r\nBread\rButter',其中的行终止符依次为:
\n位于Milk之后\r\n位于Chicken之后(单个整体分隔符)\r位于Bread之后
所有行终止符之间都有有效内容,所以拆分结果为 ['Milk', 'Chicken', 'Bread', 'Butter'],没有空项。
第二个测试用例逻辑
第二个测试用例的字符串为 'Milk\nChicken\r\rBread\rButter',其中Chicken之后的行终止符变为两个连续的独立\r:
- 第一个
\r作为拆分边界,拆分出Chicken - 第二个
\r是紧邻的下一个拆分边界,两个\r之间没有任何字符,所以拆分出空字符串 - 后续再拆分出
Bread和Butter
因此最终结果中会多出一个空列表项。
你可以用极简测试代码验证这个规则:
# \r\n作为整体,无空项 print('a\r\nb'.splitlines()) # 输出 ['a', 'b'] # 两个独立\r,有空项 print('a\r\rb'.splitlines()) # 输出 ['a', '', 'b']
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

