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

如何在Python的多层嵌套数组中定位特定类型的变量?

提取嵌套集合中的特定类型变量

通用解决方案:递归遍历

递归是处理任意深度嵌套结构最直接的方式,不管字符串藏在哪一层都能精准捕获:

def extract_strings(nested_collection):
    strings = []
    for item in nested_collection:
        if isinstance(item, str):
            strings.append(item)
        elif isinstance(item, (list, tuple)):
            # 若当前元素是列表/元组,递归遍历内部元素
            strings.extend(extract_strings(item))
    return strings

# 测试示例数组
sample_array = [[[[11.0, 16.0], [113.0, 16.0], [113.0, 41.0], [11.0, 41.0]], ("I WANNA BE LOCATED", 548967)]]
print(extract_strings(sample_array))  # 输出: ['I WANNA BE LOCATED']

更轻量的生成器版本

用生成器可以减少内存占用(尤其适合处理大型嵌套集合),写法也更紧凑:

def gen_strings(nested):
    for item in nested:
        if isinstance(item, str):
            yield item
        elif isinstance(item, (list, tuple)):
            yield from gen_strings(item)

sample_array = [[[[11.0, 16.0], [113.0, 16.0], [113.0, 41.0], [11.0, 41.0]], ("I WANNA BE LOCATED", 548967)]]
result = list(gen_strings(sample_array))
print(result)

关于numpy和lambda的说明

  • numpy不适用:numpy主打同构数值型数组,你的集合混合了列表、元组、字符串、数值等多种类型,用numpy处理反而会徒增复杂度,完全没必要。
  • lambda写法(不推荐):虽然能用lambda结合递归实现,但可读性极差,后期维护困难,示例仅供参考:
extract_strings = lambda x: [y for item in x for y in (extract_strings(item) if isinstance(item, (list, tuple)) else [item]) if isinstance(y, str)]

sample_array = [[[[11.0, 16.0], [113.0, 16.0], [113.0, 41.0], [11.0, 41.0]], ("I WANNA BE LOCATED", 548967)]]
print(extract_strings(sample_array))

普通for循环无效的原因

你之前用的for循环应该只做了浅遍历,仅处理了最外层元素,没有深入嵌套的子集合。递归则能逐层遍历所有嵌套层级,不管字符串在哪个索引位置都能被找到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:15:34