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

  • AndroidSale

    AndroidSale

    17 NİSAN 2011
  • Qmusic Romania

    Qmusic Roman

    8 Temmuz 2011
  • xiaoyu85

    xiaoyu85

    20 ŞUBAT 2010