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

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • cyriak

    cyriak

    29 Mart 2006
  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007