处理不同长度嵌套列表取公共元素时报'int'不可下标错误如何解决?
代码问题说明
报错直接原因
- 你在循环中使用的
i是range(max_lengh)生成的整型变量,整型对象不支持下标取值操作,你写的i[0]是非法操作,这就是TypeError: 'int' object is not subscriptable报错的根因。
其他潜在问题
- 逻辑不符合需求:你写的判断语句是直接对比两个子列表的全部内容,不是你所说的仅对比子列表首元素;且用
i%min_lengh取索引的逻辑完全错误,既可能出现索引越界,也无法正确匹配不同位置的公共元素。 - 变量命名违规:你使用Python内置关键字
list作为变量名,会覆盖内置的list类,后续调用list()相关方法会出现异常。 - 语法错误:如果这段代码没有封装在函数内部,直接写
return会抛出语法错误。 - 示例列表不规范:列表中的姓名、城市属于字符串类型,没有加引号包裹,运行时会报未定义变量的错误。
修正代码
需求1:提取两个列表中完全相同的子列表
lst1 = [[1234, "John Paul", "New York"], [4567, "Jude Law", "London"],[7891, "Rick Ross", "Miami"]] lst2 = [[1234, "John Paul", "New York"], [7891, "Rick Ross", "Miami"]] common_list = [item for item in lst1 if item in lst2] print(common_list)
需求2:仅按子列表首元素匹配,提取首元素相同的子列表
lst1 = [[1234, "John Paul", "New York"], [4567, "Jude Law", "London"],[7891, "Rick Ross", "Miami"]] lst2 = [[1234, "John Paul", "New York"], [7891, "Rick Ross", "Miami"]] # 先提取lst2所有子列表的首元素做匹配池 lst2_first_ids = {item[0] for item in lst2} common_list = [item for item in lst1 if item[0] in lst2_first_ids] print(common_list)
两种写法的输出均为[[1234, 'John Paul', 'New York'], [7891, 'Rick Ross', 'Miami']],符合预期。
内容的提问来源于stack exchange,提问作者user6248190
相关产品推荐
相关产品推荐

