Увод
А Листа сматра се једном од најфлексибилнијих структура података у програмском језику Питхон. С друге стране, дводимензионална листа или 2Д листа, која се генерално назива листом листа, је објекат листе где је сваки елемент сама листа. На пример: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].
Изједначавање листе листа је процес трансформације дводимензионалне листе у једнодимензионалну листу уклањањем гнежђа сваког елемента листе који се чува на листи листа, односно трансформисањем [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] до [9, 8, 7, 6, 5, 4, 3, 2, 1].
Процес спљоштења можемо извршити уз помоћ угнежденог за петље, рекурзија, разумевање листе, основне функције или увоз библиотека или пакета у Питхон-у о дубини и правилности угнежђених листа.
У овом водичу ћемо радити на различитим методама како бисмо изравнали угнежђене листе користећи програмски језик Питхон. Али пре него што почнемо, хајде да разумемо типове угнежђених листа.
Које су врсте угнежђених листа?
Као што знамо, Питхон је слабо куцани програмски језик. Дакле, можемо наићи на две врсте листа листа. Ове листе листа или угнежђене листе су следеће:
- Редовна листа листа
- Неправилна листа листа
Редовна листа листа
Свака ставка у редовној листи листа се назива подлиста, чиме се посматра уједначеност типа елемента. На пример: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] је редовна листа листа као [9, 8, 7], [6, 5, 4] , [3, 2, 1] је типа листе.
Неправилна листа листа
недефинисан нагиб
Свака ставка у нерегуларној листи листа се или назива подлиста или елемент који није на листи (на пример, стринг или цео број). Дакле, постоји неправилност у погледу врсте елемента. На пример: [[9, 8, 7], [6, 5], 4, 3] је неправилна листа листа јер су [9, 8, 7] и [6, 5] типа листа, док су 4 а 3 су типа инт.
Изједначавање листе листа помоћу петљи Нестед фор
Изједначавање листе листа са угнежђеним за Помоћ петље се сматра грубим приступом за добијање равне листе. Ову методу можемо извести тако што ћемо изабрати сваку ставку са дводимензионалне листе и распоредити је у једнодимензионалну листу.
Размотримо следећи пример који ради и за регуларне и за неправилне листе листа.
Пример:
# 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))
Излаз:
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]
Објашњење:
У горњем примеру дефинисали смо функцију као флаттенлист који узима параметар као _2длист . Тада смо користили за петљу да бисте поновили елементе угнежђене листе и додали их да бисте генерисали спљоштену листу. Затим смо дефинисали угнежђену листу и имплементирали флаттенлист функција. Као резултат тога, угнежђена листа се успешно трансформисала у спљоштену листу.
Изједначавање угнежђене листе помоћу разумевања листе
Изједначавање листе листа уз помоћ разумевања листе сматра се елегантним приступом за добијање равне листе у зависности од дводимензионалне постојеће листе. Међутим, овај приступ нуди мање интуитивно решење.
Хајде да размотримо следећи пример.
Пример:
# 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)
Излаз:
Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Објашњење:
У горњем примеру, дефинисали смо угнежђену листу и разумевање листе. Затим смо их одштампали за кориснике. Као резултат тога, угнежђена листа је успешно трансформисана у спљоштену листу.
Изједначавање листе листа коришћењем рекурзивне методе
Такође можемо да користимо рекурзивни метод да изравнамо дводимензионалну листу. Размотримо следећи пример имплементације рекурзивне методе да бисмо сравнили листу листа. Ова имплементација добро функционише како за редовне тако и за нерегуларне листе.
Пример:
# 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]))
Излаз:
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Објашњење:
У горњем примеру смо дефинисали функцију и користили ако изјава наводећи да ли је дужина угнежђене листе једнака нули, а затим вратите угнежђену листу.
хакерска обрада
Ако је елемент података на нултом индексу инстанца листе, онда индекс листе поново улази у функцију и додаје се следећем индексу листе и тако даље. Иначе ће функција вратити елементе и тако даље. Коначно смо дефинисали угнежђену листу и извршили функцију. Као резултат тога, листа листа је рекурзивно изравнана.
Коришћење библиотека Питхон-а
Такође можемо да користимо неке од библиотека програмског језика Питхон да бисмо поравнали листу листа. Имплементација ових библиотека је описана у наставку:
Изједначавање листе листа коришћењем функцијских алата и библиотека оператора
Тхе оператер библиотека пружа ицонцат() функција за обављање основне операције као што је конкатенација. Ову функцију можемо да применимо кумулативно на елементе података угнежђене листе, с лева на десно, што резултира редукцијом угнежђене листе на спљоштену листу.
Размотримо следећи пример да бисмо разумели његову имплементацију.
Пример:
# 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, []))
Излаз:
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]
Објашњење:
У горњем примеру, увезли смо фунцтоолс библиотека заједно са оператер библиотека. Затим смо дефинисали празну листу као регуларлист . Затим смо дефинисали функцију као цонво да трансформишете листу листа у спљоштену листу. У овој функцији користили смо за петља где се елементи из угнежђене листе додају на празну листу коју смо раније дефинисали. Касније смо дефинисали угнежђену листу и извршавамо функцију. Као резултат тога, листа листа се успешно конвертује у спљоштену листу.
Изједначавање листе листа помоћу библиотеке итертоолс
Тхе итертоолс библиотека пружа ланац() функција која нам омогућава да идеално трансформишемо угнежђену листу у једну спљоштену листу. Ова функција третира узастопне серије као једну серију тако што их понавља преко итерабле прослеђеног као параметра на серијски начин.
Хајде да размотримо следећи пример:
поновите мапу у Јави
Пример:
# 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
Излаз:
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]
Објашњење:
У горњем примеру, увезли смо итертоолс библиотеку и генерисао угнежђену листу. Затим смо користили ланац() функција за претварање дате угнежђене листе у спљоштену листу. Коначно смо вратили резултат корисницима. Као резултат тога, листа листа је успешно поравната.
Изједначавање листе листа помоћу библиотеке НумПи
Тхе НумПи библиотека пружа различите свакодневне операције, укључујући спајање дводимензионалних регуларних низова по колонама или по редовима. Користићемо атрибут познат као раван како би добили једнодимензионални итератор преко низа за освајање циља. Размотримо следећи пример да бисмо разумели употребу функције конкатенације и атрибута флат.
Пример:
# 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)
Излаз:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Објашњење:
У горњем примеру, увезли смо нумпи библиотеку и дефинисао угнежђену листу. Затим смо користили спојити се функција на нумпи библиотека заједно са својим раван атрибута да изравна елементе угнежђене листе и споји их у нову спљоштену листу. Коначно смо одштампали резултат за кориснике. Дакле, листа листа је успешно изравнана.
Коришћење основних функција
Такође можемо да извршимо задатак поравнања користећи неке основне функције које пружа програмски језик Питхон.
Изједначавање листе листа помоћу функције суме
Сумирање преко унутрашњих листа можемо сматрати још једним решењем проблема. Преносимо два аргумента на сум функција: Први параметар је итерабле , што је угнежђена листа, а други параметар је почетак што је неважећа листа за следећи случај који служи као почетна равна листа где ће се додавати елементи података унутрашњих подлиста.
Можемо рећи да је овај приступ прилично згодан јер не морамо ништа да увозимо. Међутим, то је спорије од итертоолс() и ланац() функције када постоји велики број подлиста присутних у угнежђеној листи.
Хајде да размотримо следећи пример:
Пример:
# 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)
Излаз:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Објашњење:
израчунавање стажа у екцелу
У горњем примеру дефинисали смо угнежђену листу. Затим смо користили сума() функцију и поравнао угнежђену листу у једнодимензионалну листу и одштампао резултујућу листу за кориснике. Као резултат тога, ми смо успешно трансформисали листу листа у равну листу.
Изједначавање листе листа помоћу кључне речи Ламбда
Анонимну функцију можемо дефинисати помоћу кључне речи ламбда . Можемо проследити редовну/неправилну листу као параметар овој анонимној функцији. Процена израза се врши да би се добила равна једнодимензионална листа.
Хајде да размотримо следећи пример:
Пример:
# 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))
Излаз:
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]
Објашњење:
У горњем примеру дефинисали смо угнежђену листу. Затим смо користили ламбда кључну реч заједно са аргументом који дефинише израз за разумевање листе. Затим смо их одштампали за кориснике. Као резултат тога, успешно смо конвертовали дводимензионалну неправилну листу у спљоштену листу.