SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011