Python'da Liste Listesi Nasıl Düzleştirilir

Python'da liste listesini nasıl düzleştireceğinizi öğrenin. Yuvalanmış liste anlamalarını, itertools.chain, sum ve özyinelemeli yöntemleri kod örnekleriyle karşılaştırın.

Bu Çözümü Editör'de deneyin

Genel Bakış

Matris hesaplamaları, veritabanı satırları veya ayrıştırılmış veri ağaçlarıyla çalışırken, liste listesi gibi iç içe geçmiş yapılarla sıklıkla karşılaşırsınız: `[[1, 2], [3, 4]]'. Bu yapıyı düzleştirmek, onu tüm ayrı öğeleri içeren tek boyutlu bir listeye dönüştürmek anlamına gelir: "[1, 2, 3, 4]". Python bunu başarmak için birkaç şık yol sunar.

Bir liste listesini düzleştirmenin en yaygın ve Pythonic yolu, iç içe geçmiş liste anlayışını kullanmaktır: `[item for sublist in matris for item in sublist]'. Döngüler iç içe geçmiş bir "for" döngüsüyle aynı sırada yazıldığı için sözdizimi ilk başta biraz mantık dışı görünebilir, ancak oldukça optimize edilmiştir, hızlıdır ve harici kitaplıkların içe aktarılmasını gerektirmez.

Alternatif olarak, "itertools" modülünün "chain.from_iterable()" fonksiyonunu kullanabilirsiniz. Bu, bellek açısından en verimli yaklaşımdır çünkü bellekte hemen yeni bir liste tahsis etmek yerine öğeleri yavaş yavaş üreten bir yineleyici döndürür. Derinlemesine iç içe geçmiş listeler için (isteğe bağlı derinliğe sahip), tüm seviyeleri açmak için özyinelemeli bir oluşturucu işlevi yazmalısınız.

Kod ve Yürütme Çıkışı

Bu komut dosyası, liste kavramalarını, itertools.chain'i ve özyinelemeli paket açmayı kullanarak bir liste listesini düzleştirmeyi gösterir.

flatten_list.py
Editör'de deneyin
import itertools

matrix = [[1, 2, 3], [4, 5], [6, 7, 8]]

# Method 1: List comprehension (Pythonic and fast)
flat_comp = [item for sublist in matrix for item in sublist]
print("List comprehension:", flat_comp)

# Method 2: itertools.chain (Highly memory efficient)
flat_chain = list(itertools.chain.from_iterable(matrix))
print("itertools.chain:", flat_chain)

# Method 3: Recursive function for deep/irregular nesting
irregular = [1, [2, 3], [[4, 5], 6]]

def flatten_deep(items):
    result = []
    for item in items:
        if isinstance(item, list):
            result.extend(flatten_deep(item))
        else:
            result.append(item)
    return result

print("Deep flatten:", flatten_deep(irregular))
Terminal Çıkışı
List comprehension: [1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain: [1, 2, 3, 4, 5, 6, 7, 8]
Deep flatten: [1, 2, 3, 4, 5, 6]

Adım Adım Uygulama

  • Düz 2B yapılar için iç içe geçmiş liste anlayışını [item for sublist in Nested_list for item in sublist] kullanın.
  • Tembel, hafıza dostu değerlendirme için itertools'u içe aktarın ve itertools.chain.from_iterable(nested_list) öğesini çağırın.
  • Rastgele iç içe geçmiş koleksiyonları işlemek için isinstance(item, list) işlevini denetleyen özyinelemeli bir işlev tanımlayın.

Sıkça Sorulan Sorular

Listeleri düzleştirmek için sum() işlevini kullanabilir miyim?

Evet, sum(matrix, []) işe yarayacaktır, ancak kesinlikle önerilmez. O(N^2) karmaşıklığında çalışır çünkü her eklemede yeni bir liste kopyası oluşturur ve büyük veri kümeleri için korkunç performansa neden olur.

Liste listelerini düzleştirmenin en hızlı yöntemi nedir?

itertools.chain.from_iterable() genellikle en hızlısıdır ve bunu iç içe geçmiş liste kavramaları takip eder.

İlgili Konular

Önerilen Python Kaynakları

İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.