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(使用前将#替换为@)