logo

Python'da Listeyi Düzleştir

Giriş

A Liste Python programlama dilindeki en esnek veri yapılarından biri olarak kabul edilir. Öte yandan, genellikle liste listesi olarak adlandırılan iki boyutlu liste veya 2B Liste, her öğenin kendisi bir liste olduğu bir listenin nesnesidir. Örneğin: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

Bir liste listesini düzleştirme, listeler listesinde tutulan her liste öğesinin yuvalarını kaldırarak, yani [[9, 8, 7], [6'yı dönüştürerek, iki Boyutlu bir listeyi Tek Boyutlu bir listeye dönüştürme işlemidir. , 5, 4], [3, 2, 1]] ila [9, 8, 7, 6, 5, 4, 3, 2, 1].

İç içe geçme yardımı ile düzleştirme işlemini gerçekleştirebiliriz. için döngüler, özyineleme, liste kavramaları, temel işlevler veya iç içe geçmiş listelerin derinliği ve düzenliliği üzerine Python'daki kitaplıkları veya paketleri içe aktarma.

Bu dersimizde Python Programlama Dilini kullanarak iç içe geçmiş listeleri düzleştirmek için çeşitli yöntemler üzerinde çalışacağız. Ancak başlamadan önce İç İçe Liste türlerini anlayalım.

İç İçe Liste türleri nelerdir?

Bildiğimiz gibi, Python zayıf yazılmış bir programlama dilidir. Bu nedenle iki tür List of List ile karşılaşabiliriz. Bu Listeler veya İç İçe Listeler aşağıdaki gibidir:

  1. Düzenli Liste Listesi
  2. Düzensiz Liste Listesi

Düzenli Liste Listesi

Düzenli Liste Listesindeki her öğeye Alt Liste adı verilir, böylece öğe türünün tekdüzeliği gözetilir. Örneğin: [[9, 8, 7], [6, 5, 4], [3, 2, 1]], [9, 8, 7], [6, 5, 4] şeklinde normal bir liste listesidir , [3, 2, 1] liste türündedir.

Düzensiz Liste Listesi

css sınırı

Düzensiz Liste Listesindeki her öğeye Alt Liste veya Liste Dışı öğe (Örneğin, bir dize veya bir tam sayı) adı verilir. Dolayısıyla elementin türü açısından bir düzensizlik söz konusudur. Örneğin: [[9, 8, 7], [6, 5], 4, 3] düzensiz bir liste listesidir, çünkü [9, 8, 7] ve [6, 5] liste türlerindendir, oysa 4 ve 3'ü int türündedir.

İç İçe Döngüleri Kullanarak Liste Listesini Düzleştirme

Liste Listesini İç İçe Yerleştirerek Düzleştirme için Loops'un yardımı, düz bir liste elde etmek için kaba kuvvet yaklaşımı olarak kabul edilir. Bu yöntemi İki Boyutlu Listeden her bir öğeyi seçip Tek Boyutlu Listede düzenleyerek gerçekleştirebiliriz.

Hem düzenli hem de düzensiz liste listeleri için işe yarayan aşağıdaki örneği ele alalım.

Örnek:

 # defining the function def flattenlist(_2dlist): # defining an empty list flatlist = [] # Iterating through the outer list for item in _2dlist: if type(item) is list: # If the item is of the list type, iterating through the sub-list for element in item: flatlist.append(element) else: flatlist.append(item) return flatlist # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] print('Genuine List:', nestedlist) print('Converted Flat List:', flattenlist(nestedlist)) 

Çıktı:

 Genuine List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] Converted Flat List: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Açıklama:

Yukarıdaki örnekte bir fonksiyonu şu şekilde tanımladık: düzleştirilmiş liste şu şekilde bir parametre alır: _2dlistesi . Daha sonra kullandık için iç içe geçmiş listenin öğelerini yinelemek ve düzleştirilmiş bir liste oluşturmak için bunları eklemek için döngü. Daha sonra iç içe geçmiş listeyi tanımladık ve uyguladık. düzleştirilmiş liste işlev. Sonuç olarak, iç içe geçmiş liste başarıyla düzleştirilmiş listeye dönüştürüldü.

Liste Kavrama Kullanarak İç İçe Listeyi Düzleştirme

Liste Anlama yardımıyla liste listesini düzleştirmek, İki Boyutlu mevcut bir listeye bağlı olarak düz bir liste elde etmek için zarif bir yaklaşım olarak kabul edilir. Ancak bu yaklaşım daha az sezgisel bir çözüm sunar.

Aşağıdaki örneği ele alalım.

Örnek:

 # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # list comprehension flatlist = [element for sub_list in nestedlist for element in sub_list] print('Genuine list:', nestedlist) print('Converted list:', flatlist) 

Çıktı:

 Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Açıklama:

Yukarıdaki örnekte iç içe geçmiş bir liste ve liste anlayışını tanımladık. Daha sonra bunları kullanıcılar için yazdırdık. Sonuç olarak iç içe geçmiş liste düzleştirilmiş listeye başarıyla dönüştürüldü.

Yinelemeli yöntemi kullanarak Liste Listesini Düzleştirme

İki Boyutlu listeyi düzleştirmek için yinelemeli yöntemi de kullanabiliriz. Liste listesini düzleştirmek için özyinelemeli yöntemi uygulayan aşağıdaki örneği ele alalım. Bu uygulama hem düzenli hem de düzensiz listeler için iyi çalışır.

Örnek:

 # defining a function def flattenlist(nestedlist): if len(nestedlist) == 0: return nestedlist if isinstance(nestedlist[0], list): return flattenlist(nestedlist[0]) + flattenlist(nestedlist[1:]) return nestedlist[:1] + flattenlist(nestedlist[1:]) print(flattenlist([[10, 20, 30, 40], [50, 60, 70], [80, 90], 100])) 

Çıktı:

 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Açıklama:

Yukarıdaki örnekte bir fonksiyon tanımladık ve kullandık. eğer ifade iç içe geçmiş listenin uzunluğunun sıfıra eşit olup olmadığını belirtin ve ardından iç içe geçmiş listeyi döndürün.

hackleme işlemi

Sıfırıncı indeksteki veri elemanı bir listenin örneği ise, liste indeksi tekrar fonksiyona girer ve listenin aşağıdaki indeksine eklenir ve bu şekilde devam eder. Aksi takdirde fonksiyon elemanları vb. döndürecektir. En sonunda iç içe geçmiş listeyi tanımladık ve fonksiyonu çalıştırdık. Sonuç olarak, liste listesi tekrar tekrar düzleşti.

Python Kütüphanelerini Kullanmak

Liste listesini düzleştirmek için Python programlama dili kitaplıklarından bazılarını da kullanabiliriz. Bu kütüphanelerin uygulanması aşağıda açıklanmıştır:

İşlev araçlarını ve operatör kitaplıklarını kullanarak Liste Listesini düzleştirme

Şebeke kütüphane şunları sağlar: simge kedi() birleştirme gibi temel işlemi gerçekleştirme işlevi. Bu fonksiyonu iç içe geçmiş bir listenin veri öğelerine soldan sağa kümülatif olarak uygulayabiliriz, bu da iç içe geçmiş listenin düzleştirilmiş bir listeye indirgenmesine neden olur.

Uygulamasını anlamak için aşağıdaki örneği ele alalım.

Örnek:

 # importing the required libraries import operator import functools regularlist = [] # Converting the list of lists into a flattened one. def convo(nestedlist): for element in nestedlist: if type(element) is list: regularlist.append(element) else: regularlist.append([element]) return regularlist twoDlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] regular2Dlist = convo(twoDlist) print('Given List:', twoDlist) print('Converted list:', functools.reduce(operator.iconcat, regular2Dlist, [])) 

Çıktı:

 Given List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110] 

Açıklama:

Yukarıdaki örnekte, içe aktardık işlev araçları kütüphane ile birlikte Şebeke kütüphane. Daha sonra boş bir listeyi şu şekilde tanımladık: düzenli liste . Daha sonra şu şekilde bir fonksiyon tanımladık: muhabbet Liste listesini düzleştirilmiş bir listeye dönüştürmek için. Bu fonksiyonda şunu kullandık: için iç içe geçmiş listedeki öğelerin daha önce tanımladığımız boş listeye eklendiği döngü. Daha sonra iç içe listeyi tanımladık ve fonksiyonu çalıştırdık. Sonuç olarak, liste listesi başarıyla düzleştirilmiş bir listeye dönüştürülür.

itertools kütüphanesini kullanarak Liste Listesini Düzleştirme

itertools kütüphane şunları sağlar: zincir() ideal olarak iç içe geçmiş bir listeyi tek bir düzleştirilmiş listeye dönüştürmemize olanak tanıyan işlev. Bu işlev ardışık serileri, parametre olarak iletilen yinelenebilirlik yoluyla seri bir şekilde yineleyerek tek bir seri olarak ele alır.

okulu kim icat etti

Aşağıdaki örneği ele alalım:

Örnek:

 # importing the itertools library import itertools # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] flattenlist = list(itertools.chain(*nestedlist)) print('The nested list:', nestedlist) print('The flattened list:', flattenlist 

Çıktı:

 The nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] The flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Açıklama:

Yukarıdaki örnekte, içe aktardık itertools kütüphane ve iç içe geçmiş bir liste oluşturdu. Daha sonra şunu kullandık: zincir() Verilen iç içe geçmiş listeyi düzleştirilmiş listeye dönüştürme işlevi. Sonunda sonucu kullanıcılara geri gönderdik. Sonuç olarak, liste listesi başarıyla düzleştirildi.

NumPy kütüphanesini kullanarak Liste Listesini Düzleştirme

Dizi kütüphane, İki Boyutlu Düzenli Dizilerin sütun veya satır bazında birleştirilmesi de dahil olmak üzere çeşitli günlük işlemler sağlar. olarak bilinen özelliği kullanacağız. düz hedefi ele geçirmek için dizi üzerinde Tek Boyutlu Bir Yineleyici elde etmek için. Birleştirme fonksiyonunun ve düz niteliğinin kullanımını anlamak için aşağıdaki örneği ele alalım.

Örnek:

 # importing the library import numpy # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the concatenate function along with the flat attribute flattenlist = list(numpy.concatenate(nestedlist).flat) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Çıktı:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Açıklama:

Yukarıdaki örnekte, içe aktardık dizi kütüphane ve iç içe geçmiş bir liste tanımladı. Daha sonra şunu kullandık: birleştirmek işlevi dizi kütüphanesi onunla birlikte düz iç içe geçmiş listenin öğelerini düzleştirmek ve bunları yeni bir düzleştirilmiş listede birleştirmek için kullanılan öznitelik. Sonunda kullanıcılar için sonucu yazdırdık. Böylece liste listesi başarıyla düzleştirildi.

Temel İşlevleri Kullanma

Python programlama dilinin sağladığı bazı temel işlevleri kullanarak düzleştirme görevini de gerçekleştirebiliriz.

Toplama işlevini kullanarak Liste Listesini düzleştirme

Sorunun bir başka çözümü olarak iç listeler üzerinden toplama yapmayı düşünebiliriz. İki argümanı aktarıyoruz toplam fonksiyon: İlk parametre yinelenebilir iç içe geçmiş bir listedir ve ikinci parametre ise başlangıç bu, iç alt listelerin veri öğelerinin ekleneceği ilk düz liste görevi gören, aşağıdaki durum için geçersiz bir listedir.

Hiçbir şeyi ithal etmemiz gerekmediği için bu yaklaşımın oldukça kullanışlı olduğunu söyleyebiliriz. Ancak diğerlerinden daha yavaştır. itertools() Ve zincir() iç içe geçmiş listede çok sayıda alt liste bulunduğunda çalışır.

Aşağıdaki örneği ele alalım:

Örnek:

 # defining a nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the sum function flattenlist = sum(nestedlist, []) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Çıktı:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Açıklama:

Yukarıdaki örnekte iç içe listeyi tanımladık. Daha sonra şunu kullandık: toplam() işlevini yerine getirdi ve iç içe geçmiş listeyi Tek Boyutlu bir liste halinde düzleştirdi ve sonuç listesini kullanıcılar için yazdırdı. Sonuç olarak liste listesini başarılı bir şekilde düz listeye dönüştürdük.

Lambda anahtar kelimesini kullanarak Liste Listesini Düzleştirme

Anahtar kelimeyi kullanarak anonim bir işlev tanımlayabiliriz. lambda . Bu anonim fonksiyona parametre olarak normal/düzensiz listeyi aktarabiliriz. İfadenin değerlendirilmesi düz bir Tek Boyutlu Liste elde etmek için yapılır.

Aşağıdaki örneği ele alalım:

Örnek:

demetleri python sıralama
 # Defining the nested list nestedlist = [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] # Using lambda parameters: expression flattenlist = lambda nestedlist:[item for element in nestedlist for item in flattenlist(element)] if type(nestedlist) is list else [nestedlist] print('The Nested list:', nestedlist) print('The Flattened List:', flattenlist(nestedlist)) 

Çıktı:

 The Nested list: [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] The Flattened List: [10, 20, 30, 30, 50, 60, 40, 60, 70, 70] 

Açıklama:

Yukarıdaki örnekte iç içe geçmiş bir liste tanımladık. Daha sonra şunu kullandık: lambda listenin anlaşılması için bir ifadeyi tanımlayan bir argümanla birlikte anahtar kelime. Daha sonra bunları kullanıcılar için yazdırdık. Sonuç olarak, İki Boyutlu Düzensiz Listeyi başarıyla düzleştirilmiş Listeye dönüştürdük.