展平嵌套列表时触发TypeError报错,该如何修正?
解决嵌套列表展平的TypeError问题
错误原因
你的代码中,xy列表同时包含整数和子列表。当循环到整数元素时,执行for j in i会尝试遍历整数对象,但整数是不可迭代类型,因此触发TypeError: 'int' object is not iterable。
解决方案
1. 基础判断法(适配单层嵌套)
通过判断元素类型,分别处理整数和子列表:
xy = [3,5,[7,9,3,4],5,6] flat = [] for i in xy: # 检查当前元素是否为列表 if isinstance(i, list): # 遍历子列表并添加元素 for j in i: flat.append(j) else: # 直接添加整数元素 flat.append(i) print(flat) # 输出: [3, 5, 7, 9, 3, 4, 5, 6]
2. 递归法(适配多层嵌套)
如果你的列表存在更深层次的嵌套(比如子列表里还有子列表),可以用递归处理:
def flatten(nested_list): flat_list = [] for item in nested_list: if isinstance(item, list): # 递归展平子列表,并合并到结果中 flat_list.extend(flatten(item)) else: flat_list.append(item) return flat_list # 测试多层嵌套场景 xy = [3,5,[7,9,[11,13],3,4],5,6] print(flatten(xy)) # 输出: [3, 5, 7, 9, 11, 13, 3, 4, 5, 6]
3. 列表推导式(简洁写法,适配单层嵌套)
用列表推导式简化代码逻辑:
xy = [3,5,[7,9,3,4],5,6] flat = [j for i in xy for j in (i if isinstance(i, list) else [i])] print(flat) # 输出: [3, 5, 7, 9, 3, 4, 5, 6]
内容的提问来源于stack exchange,提问作者Pritam Mahadik
相关产品推荐
相关产品推荐

