如何获取2D/3D列表内层元素长度并解决列表索引TypeError报错
错误原因
- 核心问题是
for i in list遍历逻辑错误:遍历直接拿到的是外层列表的每一个子元素(比如首次循环的i就是[0, [1, 2, 3]]这个列表本身),不是列表的下标索引。后续用list[i][1]相当于把列表元素作为下标传入,自然触发「列表索引必须是整数或切片,不能是列表」的类型错误。 - 额外不规范点:使用Python内置关键字
list作为变量名/参数名,会覆盖内置的列表类型,后续如果要用到list()转型等操作会出错,建议更名。
修复方案
方法1:直接遍历元素取值
不需要通过索引取值,直接用遍历得到的子元素取第二层的列表即可,修复后代码:
def max_inner_list_length(input_list): maximum = 0 for item in input_list: current_len = len(item[1]) if current_len > maximum: maximum = current_len return maximum # 测试用列表 test_list = [[0, [1, 2, 3]], [1, [0, 1, -3, 8, 5]], [2, [0, 7, 2, 1, -5]], [3, [0, 4, 1, -9]], [4, [0, 6, -2, 3]], [5, [0]], [6, [0, 2, -1, 8]], [7, [0, -7, 3]], [8, [0, 8, 5, 6, 3]], [9, [0, -4, 1, 9]]] print(max_inner_list_length(test_list))
运行后输出为5,符合预期。
方法2:索引遍历写法
如果习惯通过索引访问,可修改遍历逻辑为遍历下标范围:
def max_inner_list_length(input_list): maximum = 0 for i in range(len(input_list)): current_len = len(input_list[i][1]) if current_len > maximum: maximum = current_len return maximum
内容的提问来源于stack exchange,提问作者metsys
相关产品推荐
相关产品推荐

