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) 迭代包含字符串和列表的列表时 的相关文章