Python列表负数替换为字符串'neg'时遇错误的解决咨询
问题分析与解决
你的代码报错原因拆解
1. IndexError:索引越界
你写的for i in lis里,i是列表的元素值而非索引。比如原列表里的-3,执行lis[i]等价于取lis[-3](Python允许负索引,但如果元素绝对值超过列表长度,比如列表只有6个元素却出现-7,lis[-7]就会直接越界报错)。而且就算是合法负索引,你修改的也不是当前目标元素的位置,完全搞错了操作对象。
2. TypeError:类型无法比较
当你把某个负数改成字符串"neg"后,循环继续遍历到这个字符串时,会执行i < 0的判断——字符串和整数无法直接比较大小,自然抛出这个错误。
正确实现方法
方法一:通过索引遍历修改
用range(len(lis))获取每个元素的索引,通过索引访问并修改元素,彻底区分元素值和索引:
def swapToNeg(lis): for idx in range(len(lis)): if lis[idx] < 0: lis[idx] = "neg" print(lis) swapToNeg([1,2,-3,4,-5,6]) # 输出 [1, 2, 'neg', 4, 'neg', 6]
方法二:列表推导式(更简洁)
直接生成新列表,逻辑清晰,还能保留原列表(如果有需求的话):
def swapToNeg(lis): new_lis = ["neg" if num < 0 else num for num in lis] print(new_lis) swapToNeg([1,2,-3,4,-5,6]) # 输出 [1, 2, 'neg', 4, 'neg', 6]
内容的提问来源于stack exchange,提问作者aMoreno
相关产品推荐
相关产品推荐

