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

  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • Photoshop Pro Help

    Photoshop Pr

    1 Ocak 2007
  • TheTwistedFrequency

    TheTwistedFr

    26 NİSAN 2010