28 Ocak 2010, PERŞEMBE
Dümdüz (düzensiz) listesi Python listeler
Evet, biliyorum bu konu olmuştur kaplı önce (here, here, here, here), ama bildiğim kadarıyla, tüm çözümler, biri dışında, başarısız bir listesi: bunun gibi
L = [[[1, 2, 3], [4, 5]], 6]
İstenen çıktı
[1, 2, 3, 4, 5, 6]
Ya da belki daha da iyisi, bir yineleyici. Rasgele bir yerleştirme için çalışan gördüğüm tek çözüm in this question bulundu:
def flatten(x):
result = []
for el in x:
if hasattr(el, "__iter__") and not isinstance(el, basestring):
result.extend(flatten(el))
else:
result.append(el)
return result
flatten(L)
Bu iyi bir model mi? Bir şeyi göz ardı ettim? Herhangi bir sorun?
CEVAP
28 Ocak 2010, PERŞEMBE
Jeneratör fonksiyonları kullanılarak sizin örnek biraz daha kolay okunur hale getirmek ve muhtemelen performansını artırmak.
def flatten(l):
for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
for sub in flatten(el):
yield sub
else:
yield el
Iterable ABC 2.6 ekledi kullandım.
Python 3 basestring
artık, ama kullanabilirsiniz
basestring = (str, bytes)
aynı etkiyi almak için.
Bunu Paylaş:
Bulma öğenin dizin listesi Python içer...
Nasıl sözlük değerlere göre sözlükler ...
Nasıl klon ya da Python içinde bir lis...
Nasıl Python ederken bir listesi düzen...
Göster iki Python bir sözlük haline li...