You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:45:34