Wenn Sie nur Listen (oder Unterklassen von list
) und sonst nichts, außer den Inhalt der endgültigen Liste zählen möchten nicht nur eine andere Liste enthält:
def len_counting_containers(inlist):
count = 0
current = inlist
while len(current) == 1 and isinstance(current[0], list):
count += 1
current = current[0]
return count + len(current)
len_counting_containers([[[[[[[[1, 2, 3]]]]]]]])
Was uns gibt:
10
Beachten Sie, dass dies eine ziemlich zerbrechliche Operation ist (wie in jedem Fall verwenden Sie isinstance()
in Python) - so wollen Sie sicher sein, dass Ihre eingehenden Daten immer so strukturiert sind, wie Sie es erwarten. Wenn Ihre Daten aus einer von Ihnen kontrollierten Quelle stammen, würde ich empfehlen, zu prüfen, wie Sie die Daten erstellen und sehen, ob Sie sie in einer besseren Form angeben können - z. B. (7, [1,2,3])
.
Sie könnten auch diese rekursiv implementieren:
def len_counting_containers(current):
return len_counting_containers(current[0])+1 if len(current) == 1 and isinstance(current[0], list) else len(current)
len_counting_containers([[[[[[[[1, 2, 3]]]]]]]])
Dies ergibt das gleiche Ergebnis in weniger Code, aber wenn Sie mit einem irrsinnig großen Listen arbeiten diese Rekursion Grenzen stoßen könnte.
Es sind keine leeren Listen drin. – jamylak
Können Sie erklären, wie Sie 10 für diese Liste bekommen? –
Er zählt die Anzahl der Elemente in jeder Liste und fügt sie zusammen – jamylak