Python列表字符串动态拼接及按数字串拆分的报错如何解决?
错误原因分析
- 语法错误:
refStart + 1 += i属于非法赋值,Python中赋值运算符左侧只能是可被修改的变量,不能是运算表达式,要实现refStart自增1的正确写法是refStart += 1 - 逻辑错误1:
elif stringList[i].isdigit == True漏写了方法调用的括号,isdigit是字符串的内置方法,必须加()调用才能返回布尔判断结果,否则判断的是方法对象本身,永远不会触发该分支 - 逻辑错误2:同时使用
for item in stringList遍历和下标i访问属于冗余操作,且后续嵌套的else分支循环逻辑完全混乱,不符合需求的拆分逻辑
修正后的实现代码
stringList = ["One", "Two", "Three", "456", "Seven", "Eight", "Nine"] stringOne = "" stringTwo = "" stringThree = "" # 标记是否已经遇到了全数字字符串 found_digit = False for item in stringList: if not found_digit: if item.isdigit(): # 第一次遇到全数字字符串,存入第二个变量,切换标记 stringTwo = item found_digit = True else: # 还没遇到数字,拼接进第一个变量 stringOne += item else: # 已经遇到过数字,剩余内容全部拼接进第三个变量 stringThree += item # 输出验证结果 print(stringOne) print(stringTwo) print(stringThree)
运行后输出和预期效果完全一致:
OneTwoThree 456 SevenEightNine
更简洁的实现方式
利用Python列表切片和join方法可以更轻量实现需求:
stringList = ["One", "Two", "Three", "456", "Seven", "Eight", "Nine"] # 找到第一个全数字元素的下标 digit_idx = next(idx for idx, s in enumerate(stringList) if s.isdigit()) stringOne = ''.join(stringList[:digit_idx]) stringTwo = stringList[digit_idx] stringThree = ''.join(stringList[digit_idx+1:])
内容的提问来源于stack exchange,提问作者Matheus Vinicius
相关产品推荐
相关产品推荐

