2013-02-19 71 views
4

Iterating nested list inside-out处,我被告知“类型检查不是Pythonic”。通常,这是真的:我们只想看看界面(鸭子打字)而不是特定的类型。isinstance(x,list)在迭代包含字符串和列表的列表时

该问题询问['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行吗?

回答

6

我认为你的答案是确定在这里 - 尽管我可能将其更改为

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

,使其多了几分接受取决于预期的输入。最终,你需要一些问题isinstance这就是为什么它仍然存在于语言中。

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

基本上,我猜我的观点是isinstance破解,你需要做柠檬水当你的同事/库的一些作家的地方给你柠檬 - 否则,你尽可能避免使用。

相关问题