Python Programming

Python’da Liste Düzleştirme: Sığ ve Derin Teknikler

Spread the love

İç içe geçmiş bir listeyi tek seviyeli bir listeye dönüştürme işlemi olan listeyi düzleştirme, Python’da yaygın bir görevdir. Bu makale, bunu başarmak için çeşitli teknikleri inceleyerek bunları düzleştirme derinliklerine göre kategorize eder: sığ ve derin.

İçerik Tablosu

Sığ Düzleştirme

Sığ düzleştirme yalnızca bir seviye iç içe geçmeyi kaldırır. İç listelerin daha fazla iç içe geçmiş yapı içermediği durumlarda, listelerin listesine sahip olduğunuzda idealdir. İki verimli yöntem mevcuttur:

Liste Anlama (List Comprehension): Bu, özlü ve okunabilir bir çözüm sağlar:


nested_list = [[1, 2, 3], [4, 5], [6]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list)  # Çıktı: [1, 2, 3, 4, 5, 6]

itertools.chain.from_iterable: Daha büyük listeler için, bu yaklaşım optimize edilmiş yinelemesi nedeniyle daha iyi performans sunar:


from itertools import chain

nested_list = [[1, 2, 3], [4, 5], [6]]
flat_list = list(chain.from_iterable(nested_list))
print(flat_list)  # Çıktı: [1, 2, 3, 4, 5, 6]

Sınırlamalar: Sığ düzleştirme, iç içe geçmiş listelerin iç içe geçmiş listeleri içeren listeleri tamamen düzleştiremez. Örneğin:


nested_list = [[1, 2, [3, 4]], [5, 6]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list)  # Çıktı: [1, 2, [3, 4], 5, 6]

[3, 4] iç listesi iç içe kalır.

Derin Düzleştirme

Derin düzleştirme, herhangi bir derinlikteki iç içe geçmiş listeleri yinelemeli olarak işler. İki temel yaklaşım mevcuttur:

Yinelemeli Fonksiyon: Bu zarif çözüm, iç içe geçmiş yapıyı dolaşmak için yinelemeyi kullanır:


def flatten(nested_list):
    flat_list = []
    for item in nested_list:
        if isinstance(item, list):
            flat_list.extend(flatten(item))
        else:
            flat_list.append(item)
    return flat_list

nested_list = [[1, 2, [3, 4]], [5, 6, [7, [8, 9]]]]
flat_list = flatten(nested_list)
print(flat_list)  # Çıktı: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Yinelemeli Yaklaşım (yığın kullanarak): Yineleme, aşırı derecede derin iç içe geçmelerde yığın taşması hatalarına yol açabilir. Yığın kullanan yinelemeli bir yaklaşım sağlamlık sağlar:


def flatten_iterative(nested_list):
    flat_list = []
    stack = [nested_list]
    while stack:
        current = stack.pop()
        if isinstance(current, list):
            stack.extend(current)
        else:
            flat_list.append(current)
    return flat_list

nested_list = [[1, 2, [3, 4]], [5, 6, [7, [8, 9]]]]
flat_list = flatten_iterative(nested_list)
print(flat_list)  # Çıktı: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Sonuç

Sığ ve derin düzleştirme arasında seçim, tamamen iç içe geçmiş listelerinizin yapısına bağlıdır. Sığ düzleştirme, tek seviyeli iç içe geçme için yeterlidir ve özlü, verimli çözümler sunar. Bununla birlikte, keyfi olarak iç içe geçmiş listeler için, sağlamlık için tercih edilen yinelemeli yığın tabanlı yaklaşımı kullanan derin düzleştirme gereklidir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir