【问题标题】:isinstance(x, list) when iterating a list containing strings and listsisinstance(x, list) 迭代包含字符串和列表的列表时
【发布时间】:2013-02-04 09:02:53
【问题描述】:

Iterating nested list inside-out,有人告诉我“类型检查不是 Pythonic”。一般来说,这是真的:我们只想查看界面(duck-typing)而不是特定类型。

该问题涉及['a', ['c', ['e'], 'd'], 'b'] 形式的嵌套列表,我们特别考虑字符串原子(不可迭代)。所以,我们不能使用毯子 collections.Iterable,但另一方面 isinstance(x, list) 确实有点 hacky。

我的回答是

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

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

【问题讨论】:

    标签: python collections iterable


    【解决方案1】:

    我认为您的回答在这里还可以——尽管我可能会将其更改为

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

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

    话虽如此,关于这个问题的非pythonic是数据结构。在python中,如果一个问题看起来真的很难,这可能意味着你以错误的方式存储数据......(当然,我意识到你无法控制另一个问题的数据结构的原始海报是什么; -)。

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

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 2018-12-21
      • 2019-07-19
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      相关资源
      最近更新 更多