isinstance(x, Liste) bei der Iteration einer Liste mit strings und Listen
In Durchlaufen verschachtelte Liste inside-out, mir wurde gesagt, dass "Typ-checking ist nicht Pythonic". Im Allgemeinen ist dies wahr: wir wollen nur die in der Schnittstelle (duck-typing), anstatt einen bestimmten Typ.
Die Frage fragt verschachtelte Listen der form ['a', ['c', ['e'], 'd'], 'b']
, und wir insbesondere prüfen, Streicher Atomare (nicht durchsuchbar). Also, wir können nicht, verwenden Sie eine Decke collections.Iterable
, aber auf der anderen Seite isinstance(x, list)
scheint ein bisschen hacky.
Meine Antwort war
def traverse(l):
for x in l:
if isinstance(x, list):
traverse(x)
callback(l)
Was ist ein besserer Ansatz? Oder ist isinstance
OK hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, deine Antwort ist OK hier-auch wenn ich vielleicht ändern Sie es zu
machen es ein wenig mehr Akzeptanz abhängig von der erwarteten Eingabe. Schließlich, einige Probleme, die Sie brauchen
isinstance
das ist, warum es immer noch existiert in der Sprache.Dass gesagt wird, die Sache über dieses problem, das ist un-pythonic ist die Daten-Struktur. In python, wenn ein problem scheint wirklich schwer, es wahrscheinlich bedeutet, dass Sie die Speicherung der Daten in der falschen Art und Weise ... (natürlich weiß ich, dass Sie hatte keine Kontrolle darüber, was der original-poster der anderen Frage Datenstruktur wurde ;-).
Grundsätzlich, denke ich, dass meine Ansicht ist, dass
isinstance
ist die hack, dass Sie brauchen, um Limonade zu machen, wenn Ihre Kollegen/Bibliothek einige Schriftsteller irgendwo gibt dir Zitronen -- Sonst werden Sie es vermeiden, wo möglich.