2013-02-19 70 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破解,你需要做檸檬水當你的同事/庫的一些作家的地方給你檸檬 - 否則,你儘可能避免使用。

相關問題