Python报错TypeError: 'int'对象不可下标,求错误定位与解决
分析Python嵌套列表处理代码中的TypeError错误
原代码
l=[['d',4,4,4],['z',26,26,26],['m',13,13,13]] n=[] m=[] for l in l: n.append(l[0]) n.sort() for n in n: i=0 prev=len(m) while prev == len(m): if n==l[i][0]: m.append([l[i][1],l[i][2],l[i][3]]) else: i=i+1
触发的错误
Traceback (most recent call last): File "<string>", line 11, in <module> TypeError: 'int' object is not subscriptable
错误根源分析
核心问题是变量名重复使用导致的变量覆盖:
- 原嵌套列表变量名为
l,但第一个for l in l:循环中,每次迭代会把列表中的子元素赋值给变量l。循环结束后,l不再是原嵌套列表,而是最后一个子列表['m',13,13,13]。 - 收集首字符的列表变量是
n,第二个for n in n:循环中,每次迭代把列表中的单个字符赋值给变量n,导致循环内的n变成单个字符串,而非原列表。
错误触发点在while循环内的l[i][0]:当i递增到1时,l[i]取到的是整数13,尝试对整数做下标访问(13[0]),直接触发TypeError。
修正方案
基础修正版(避免变量覆盖,逻辑清晰)
original_list = [['d',4,4,4],['z',26,26,26],['m',13,13,13]] char_list = [] result_list = [] # 收集所有首字符并排序 for item in original_list: char_list.append(item[0]) char_list.sort() # 根据排序后的字符提取对应数值部分 for char in char_list: for item in original_list: if item[0] == char: result_list.append(item[1:4]) # 用切片简化元素提取 print(result_list) # 输出: [[4,4,4], [13,13,13], [26,26,26]]
高效优化版(用字典映射减少循环)
original_list = [['d',4,4,4],['z',26,26,26],['m',13,13,13]] # 建立字符到数值列表的映射 char_to_values = {item[0]: item[1:] for item in original_list} # 按字符排序后提取对应值 result_list = [char_to_values[char] for char in sorted(char_to_values.keys())] print(result_list) # 输出: [[4,4,4], [13,13,13], [26,26,26]]
修正说明
- 改用不重复的变量名(如
original_list、item、char),彻底避免变量覆盖问题。 - 用切片
item[1:4]替代逐个索引取值,代码更简洁。 - 优化版利用字典的O(1)查找特性,减少嵌套循环,提升代码效率。
内容的提问来源于stack exchange,提问作者R. N. T.
相关产品推荐
相关产品推荐

