如何解决计算列表字符串ASCII值之和时的TypeError错误
解决列表字符串替换为ASCII值之和的问题
嘿,我来帮你搞定这个代码问题!先拆解下你代码里的几个小问题,然后给你修正后的方案:
你的代码里的问题点:
- 遍历字符的方式错误:
for j in list1[i]这里,i是列表里的字符串元素(比如'Ganga'),不是整数索引,直接写for j in i就能遍历这个字符串里的每个字符了。 - 总和变量初始化位置不对:你把
sum1 = 0放在了外层循环外面,这样每次循环都会累加之前的总和,应该把它放到外层循环里面,每次处理新字符串时重置为0。 - 列表没有replace方法:Python的
list类型没有replace()方法,要修改列表元素,要么通过索引直接赋值,要么生成一个新列表。 - 多余的类型转换:
ord(int(j))完全没必要,j本身就是字符,直接用ord(j)就能获取它的ASCII值。
修正后的代码(两种方式)
方式一:用列表推导式(简洁推荐)
这是Python里最简洁的写法,一行搞定:
list1 = ['Ganga', 'Narmada', 'Kaveri', 'Tapi', 'Yamuna'] list1 = [sum(ord(char) for char in s) for s in list1] print(list1)
运行后会输出:[539, 750, 650, 417, 673](每个字符串的ASCII值总和)
方式二:修改原循环(适合理解过程)
如果你想保留原来的循环结构,调整后是这样:
list1 = ['Ganga', 'Narmada', 'Kaveri', 'Tapi', 'Yamuna'] # 用enumerate同时拿到索引和对应的字符串 for idx, s in enumerate(list1): sum1 = 0 # 直接遍历字符串里的每个字符 for char in s: sum1 += ord(char) # 通过索引替换原列表的元素 list1[idx] = sum1 print(list1)
这样运行后就能得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者PixelPusher
相关产品推荐
相关产品推荐

