isinstance(x, list) 迭代包含字符串和列表的列表时

2024-01-01

At 由内而外迭代嵌套列表 https://stackoverflow.com/questions/14960380/iterating-nested-list-inside-out/14960687#comment21002419_14960687,我被告知“类型检查不是Pythonic”。一般来说,这是正确的:我们只想查看接口(鸭子类型)而不是特定类型。

该问题询问有关表单的嵌套列表['a', ['c', ['e'], 'd'], 'b'],并且我们特别考虑字符串原子(不可迭代)。所以我们不能用毯子collections.Iterable, 但另一方面isinstance(x, list)看起来确实有点老套。

我的回答是

def traverse(l):
    for x in l:
        if isinstance(x, list):
            traverse(x)
    callback(l)

什么是更好的方法?或者是isinstance在这里好吗?


我认为你的答案在这里是可以的——尽管我可能会将其更改为

if not isinstance(x,basestring):
   ...

根据预期的输入使其更容易被接受。最终,您需要解决一些问题isinstance这就是为什么它仍然存在于语言中。

话虽这么说,这个问题的非 Python 特征是数据结构。在Python中,如果一个问题看起来真的很难,那可能意味着你以错误的方式存储数据......(当然,我意识到你无法控制另一个问题的数据结构的原始发布者是什么; -)。

基本上,我想我的观点是isinstance is the hack当你的同事/某个图书馆作家给你柠檬时,你需要制作柠檬水——否则你会尽可能避免它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

isinstance(x, list) 迭代包含字符串和列表的列表时 的相关文章

随机推荐

  • 为什么 swift 不警告这个不可发送的全局传递到不同的任务?

    考虑以下代码 class Cat var name Tom class Globals var cat Cat let glob Globals func one Task glob cat name Max Expected Warnin
  • ocamlbuild;建筑顶层

    已成功使用子目录重新组织了我的 ocamlbuild 项目 https stackoverflow com questions 2209532 properly compiling modules in subfolders ocamlbu
  • 在 GAE 中实施独特的约束

    我正在尝试 Google App Engine Java 但是缺乏独特的约束使事情变得困难 我已经通过这篇文章 https stackoverflow com questions 2626978 unique constraint at d
  • 隐藏 Jinja2 模板中无法访问的链接

    我们正在工作中使用 Flask Jinja2 编写一个 Web 应用程序 该应用程序具有注册用户 可以根据其角色访问某些页面 为了在服务器端实现这一点 我们只需使用装饰页面 app route action1 security requir
  • 如何根据 Unix 时间戳计算本地时间

    如果unix时间戳在世界各地都是相同的 我如何才能获得本地时间 或者是根据不同的时区时间戳不同 也就是说 我在美国 UTC 1970 的当前秒数是 5 000 但如果我在亚洲并检查时间戳 那么它将是 4 000 秒 世界上每个国家的 UTC
  • 使用由单个安装程序安装的 SQLite 的 Java 桌面应用程序

    我是与数据库交互的 Java 桌面应用程序编程的初学者 我的目标是制作一个简单的java应用程序 它使用数据库在本地存储数据 经过一番谷歌搜索后 我发现 SQLite Derby 可以满足我的需求 我用谷歌搜索了 SQLite 和 Derb
  • App 类中的静态上下文 - 内存泄漏

    为了能够在应用程序中的任何位置获取应用程序上下文 我创建了这样的 App 类 public class App extends Application private static Context mContext public stati
  • 带 if 语句的 Postgresql 函数

    我怎样才能使这个伪代码在 Postgresql 中工作 create or replace function getf arg character varying 255 returns int as if arg a then retur
  • Python 网页抓取被阻止

    我想抓取德国房地产网站 immobilienscout24 de 的网页 我想下载给定 URL 的 HTML 然后离线使用该 HTML 它不适合商业用途或出版 我也不打算向该网站发送垃圾邮件 它只是用于编码练习 我想编写一个 python
  • 核心数据谓词日期比较

    我试图获取与用户 selectedDate 匹配的实体中的所有对象 它是 NSDate 核心数据代码很好 但我的谓词一直返回 0 结果 数据库中的日期与用户选择的日期相同 应如何使用谓词将 selectedDate 与实体中的日期进行比较
  • 使用 VS 2005 C# 将 Excel 转换为 Oracle 数据库

    我想构建一个实用程序 可以将 Excel 工作表 列是固定的 但工作表可以是任意数量 中的数据导入到 Oracle 数据库 你能建议我应该如何 读取Excel表格 n张 最好的方法 验证数据 批量插入数据库 我关心的是这里的表现 每张纸可以
  • 为什么 cython 嵌入插件在 python 解释器中比 rust-c 接口版本具有更高的性能?

    我想问一些关于python解释器的底层原理的问题 因为我自己搜索的过程中并没有得到太多有用的信息 我最近一直在使用 rust 编写 python 插件 这为 python 的 cpu 密集型任务提供了显着的加速 并且与 c 相比 编写速度也
  • C++ tmpnam 替代方案

    我有一个 C 库 它使用tmpnam NULL 创建一个临时文件 我需要破解这个 因为它在根文件夹 c 或 中生成临时文件 因此它需要管理权限 如何使用有效的临时路径将此功能更改为其他功能 Thanks Though tmpnam返回前面加
  • OBJECT 和 EMBED 标签是否始终位于顶部?

    我有一个我制作的网站 我在该网站上流式传输视频 它开始 看起来很酷 但我用 CSS 制作的菜单总是在视频下方 因此某些链接会在对象后面消失 有谁知道我是否可以解决这个问题 我想我尝试过一次 z index 无济于事 我刚刚重新发布了这个问题
  • 这种语言有下推自动机(PDA)吗?

    the language is An B 2n Cn where n gt 0 我认为是有的 因为你可以这样处理 推入A 推入B 每个C从堆栈中弹出3次 如果没有C并且堆栈为空 则返回true 否则返回false 使用泵引理来证明这不是上下
  • TypeScript 错误 TS2403:后续变量声明必须具有相同的类型

    我的 TypeScript 项目似乎遇到了一些编译错误 完整的错误是 node modules types mocha index d ts 2680 13 error TS2403 Subsequent variable declarat
  • 有适合新手的 XML/XSD 教程吗?

    有谁知道任何关于 XSD XML 的新手教程 这些教程简单地解释了事情 但详细介绍了如何做事情 以下是有关使用 XSD 验证 XML 的教程 http www ibm com developerworks xml tutorials x v
  • 数据表 colspan 排序

    当引入 colspan 或 rowspan 时 Datatable jquery 插件会出现错误 有没有其他办法可以渡过 只需使用一些 jQuery 手动完成即可 function var tableRows myDatatable tbo
  • C++ 一个标头多个源

    I have a large class Foo1 class Foo public void apples1 void apples2 void apples3 void oranges1 void oranges2 void orang
  • isinstance(x, list) 迭代包含字符串和列表的列表时

    At 由内而外迭代嵌套列表 https stackoverflow com questions 14960380 iterating nested list inside out 14960687 comment21002419 14960