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

不用isinstance类型检查,Python如何单行实现混合元素列表扁平化?

问题

现有如下结构的列表:

l = [0, 1,[2, 3], 4, 5, [6, 7], {1, 2}]

我目前可以通过如下代码完成扁平化操作:

from collections.abc import Iterable
aux = []
for e in l:
   if not isinstance(e, Iterable):
       aux.append(e)
   else:
       aux.extend(e)

请问是否存在不使用类型检查的单行代码可以实现相同功能?

解答

你当前的代码实现的是仅展开一层嵌套可迭代对象的逻辑,不会递归处理更深层级的嵌套结构。要实现相同效果,同时避免显式类型检查的单行写法有两种可选:

  1. 用__iter__属性判断替代Iterable实例检查,可读性更高:
aux = [item for elem in l for item in (elem if hasattr(elem, '__iter__') else [elem])]
  1. 完全不做任何前置属性/类型判断,采用EAFP(出错后处理)的思路,通过异常捕获兼容不可迭代元素,严格符合无类型检查的要求:
aux = []; [exec('try: aux.extend(e)\nexcept TypeError: aux.append(e)') for e in l]

两种写法的输出和原有代码完全一致,最终结果为[0, 1, 2, 3, 4, 5, 6, 7, 1, 2],注意末尾集合元素的顺序可能因Python版本不同存在差异。

内容的提问来源于stack exchange,提问作者user17189165

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:06:00