Dümdüz (düzensiz) listesi Python listeler | Netgez.com
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

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • cekehechu

    cekehechu

    20 HAZİRAN 2006
  • Maschine Tutorials

    Maschine Tut

    15 ÅžUBAT 2011