logo

Salīdzināt sarakstu Python

Ievads

A Saraksts tiek uzskatīta par vienu no elastīgākajām datu struktūrām Python programmēšanas valodā. No otras puses, divdimensiju saraksts jeb 2D saraksts, ko parasti sauc par sarakstu sarakstu, ir saraksta objekts, kur katrs elements ir pats saraksts. Piemēram: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

Sarakstu saraksta saplacināšana ir process, kurā divdimensiju saraksts tiek pārveidots par viendimensiju sarakstu, atdalot ligzdas katru saraksta sarakstā esošo saraksta elementu, tas ir, pārveidojot [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] līdz [9, 8, 7, 6, 5, 4, 3, 2, 1].

Ar ligzdošanas palīdzību varam veikt saplacināšanas procesu priekš cilpas, rekursija, sarakstu izpratne, pamatfunkcijas vai bibliotēku vai pakotņu importēšana programmā Python par ligzdoto sarakstu dziļumu un regularitāti.

Šajā apmācībā mēs izstrādāsim dažādas metodes, lai saplacinātu ligzdotos sarakstus, izmantojot Python programmēšanas valodu. Bet pirms sākam, ļaujiet mums saprast ligzdoto sarakstu veidus.

Kādi ir ligzdoto sarakstu veidi?

Kā mēs zinām, Python ir vāji drukāta programmēšanas valoda. Tāpēc mēs varam saskarties ar divu veidu sarakstu sarakstu. Šie sarakstu vai ligzdoto sarakstu saraksts ir šāds:

  1. Regulārais sarakstu saraksts
  2. Neregulārs sarakstu saraksts

Regulārais sarakstu saraksts

Katrs regulārajā sarakstu vienums tiek saukts par apakšsarakstu, tādējādi ievērojot elementa veida vienveidību. Piemēram: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] ir regulārs sarakstu saraksts kā [9, 8, 7], [6, 5, 4] , [3, 2, 1] ir saraksta veids.

Neregulārs sarakstu saraksts

lateksa matrica

Katrs vienums neregulārajā sarakstu sarakstā tiek saukts par apakšsarakstu vai elementu, kas nav saraksta elements (piemēram, virkne vai vesels skaitlis). Tādējādi elementa veida ziņā ir pārkāpums. Piemēram: [[9, 8, 7], [6, 5], 4, 3] ir neregulārs sarakstu saraksts, jo [9, 8, 7] un [6, 5] ir saraksta veidi, savukārt 4 un 3 ir int tipa.

Sarakstu saraksta saplacināšana, izmantojot cilpu ligzdotu

Sarakstu saraksta saplacināšana ar ligzdoto priekš Loops palīdzība tiek uzskatīta par brutālu spēku pieeju, lai iegūtu vienotu sarakstu. Mēs varam veikt šo metodi, atlasot katru vienumu no Divdimensiju saraksta un sakārtojot to viendimensiju sarakstā.

Apskatīsim šādu piemēru, kas darbojas gan parastajiem, gan neregulārajiem sarakstu sarakstiem.

Piemērs:

 # 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)) 

Izvade:

 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] 

Paskaidrojums:

Iepriekš minētajā piemērā mēs esam definējuši funkciju kā flattenlist kas uzņem parametru kā _2dlist . Pēc tam esam izmantojuši priekš cilpa, lai atkārtotu ligzdotā saraksta elementus un pievienotu tos, lai ģenerētu saplacinātu sarakstu. Pēc tam esam definējuši ligzdoto sarakstu un ieviesuši flattenlist funkciju. Rezultātā ligzdotais saraksts ir veiksmīgi pārveidots par saplacinātu sarakstu.

Ligzdotā saraksta saplacināšana, izmantojot saraksta izpratni

Sarakstu saraksta saplacināšana, izmantojot saraksta izpratni, tiek uzskatīta par elegantu pieeju, lai iegūtu vienotu sarakstu atkarībā no divdimensiju esošā saraksta. Tomēr šī pieeja piedāvā mazāk intuitīvu risinājumu.

Apskatīsim šādu piemēru.

Piemērs:

 # 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) 

Izvade:

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

Paskaidrojums:

Iepriekš minētajā piemērā esam definējuši ligzdotu sarakstu un saraksta izpratni. Pēc tam esam tos izdrukājuši lietotājiem. Rezultātā ligzdotais saraksts ir veiksmīgi pārveidots par saplacinātu sarakstu.

Sarakstu saraksta saplacināšana, izmantojot rekursīvo metodi

Mēs varam arī izmantot rekursīvo metodi, lai saplacinātu divdimensiju sarakstu. Apskatīsim šādu piemēru, ieviešot rekursīvo metodi, lai izlīdzinātu sarakstu sarakstu. Šī ieviešana labi darbojas gan parastam, gan neregulāram sarakstu sarakstam.

Piemērs:

 # 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])) 

Izvade:

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

Paskaidrojums:

Iepriekš minētajā piemērā mēs esam definējuši funkciju un izmantojuši an ja paziņojums, apgalvojums norādot, ja ligzdotā saraksta garums ir vienāds ar nulli, pēc tam atgrieziet ligzdoto sarakstu.

virknes formātā java

Ja datu elements nulles indeksā ir saraksta gadījums, tad saraksta indekss atkal tiek iekļauts funkcijā un tiek pievienots nākamajam saraksta indeksam un tā tālāk. Citādi funkcija atgriezīs elementus un tā tālāk. Beidzot mēs esam definējuši ligzdoto sarakstu un izpildījuši funkciju. Rezultātā sarakstu saraksts ir rekursīvi saplacināts.

Python bibliotēku izmantošana

Mēs varam arī izmantot dažas no Python programmēšanas valodu bibliotēkām, lai izlīdzinātu sarakstu sarakstu. Šo bibliotēku ieviešana ir aprakstīta zemāk:

Sarakstu saraksta saplacināšana, izmantojot funkcionālos rīkus un operatoru bibliotēkas

The operators bibliotēka nodrošina ikonu kaķis () funkcija, lai veiktu pamata operāciju, piemēram, savienošanu. Šo funkciju varam lietot kumulatīvi ligzdotā saraksta datu elementiem no kreisās puses uz labo, kā rezultātā ligzdotais saraksts tiek samazināts līdz saplacinātam sarakstam.

Apskatīsim šādu piemēru, lai saprastu tā ieviešanu.

Piemērs:

 # 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, [])) 

Izvade:

 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] 

Paskaidrojums:

Iepriekš minētajā piemērā mēs esam importējuši funkcionālie rīki bibliotēka kopā ar operators bibliotēka. Pēc tam mēs esam definējuši tukšu sarakstu kā regulārais saraksts . Pēc tam mēs esam definējuši funkciju kā konvo lai sarakstu sarakstu pārveidotu par saplacinātu sarakstu. Šajā funkcijā mēs esam izmantojuši priekš cilpa, kurā elementi no ligzdotā saraksta tiek pievienoti tukšajam sarakstam, ko definējām iepriekš. Vēlāk mēs esam definējuši ligzdoto sarakstu un izpildām funkciju. Rezultātā sarakstu saraksts tiek veiksmīgi pārveidots saplacinātā sarakstā.

Sarakstu saraksta saplacināšana, izmantojot itertools bibliotēku

The itertorīki bibliotēka nodrošina ķēde () funkcija, kas ideālā gadījumā ļauj pārveidot ligzdotu sarakstu vienā saplacinātā sarakstā. Šī funkcija apstrādā secīgas sērijas kā vienu sēriju, atkārtojot tās, izmantojot iterējamo, kas nodots kā parametrs seriālā veidā.

Apskatīsim šādu piemēru:

Piemērs:

 # 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 

Izvade:

 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] 

Paskaidrojums:

Iepriekš minētajā piemērā mēs esam importējuši itertorīki bibliotēku un ģenerēja ligzdotu sarakstu. Pēc tam mēs izmantojām ķēde () funkcija, lai pārvērstu doto ligzdoto sarakstu saplacinātā sarakstā. Beidzot esam atgriezuši rezultātu lietotājiem. Rezultātā sarakstu saraksts tiek veiksmīgi saplacināts.

Sarakstu saraksta saplacināšana, izmantojot NumPy bibliotēku

interneta pārlūkprogrammas iestatījumi

The NumPy bibliotēka nodrošina dažādas ikdienas darbības, tostarp divdimensiju regulāro masīvu savienošanu pa kolonnām vai rindām. Mēs izmantosim atribūtu, kas pazīstams kā plakans lai iegūtu viendimensionālu iteratoru masīvam mērķa iekarošanai. Apskatīsim tālāk sniegto piemēru, lai saprastu, kā tiek izmantota savienojuma funkcija un dzīvoklis atribūts.

Piemērs:

 # 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) 

Izvade:

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

Paskaidrojums:

Iepriekš minētajā piemērā mēs esam importējuši nejutīgs bibliotēku un definēja ligzdotu sarakstu. Pēc tam mēs izmantojām sasaistīt funkcija nejutīgs bibliotēka kopā ar to plakans atribūtu, lai saplacinātu ligzdotā saraksta elementus un savienotu tos ar jaunu saplacinātu sarakstu. Beidzot esam izdrukājuši rezultātu lietotājiem. Tādējādi sarakstu saraksts ir veiksmīgi saplacināts.

Pamatfunkciju izmantošana

Mēs varam arī veikt saplacināšanas uzdevumu, izmantojot dažas pamatfunkcijas, ko nodrošina Python programmēšanas valoda.

Sarakstu saraksta saplacināšana, izmantojot summas funkciju

Mēs varam apsvērt iekšējo sarakstu apkopošanu kā vēl vienu problēmas risinājumu. Mēs nododam divus argumentus summa funkcija: pirmais parametrs ir atkārtojams , kas ir ligzdots saraksts, un otrais parametrs ir sākt kas ir nederīgs saraksts tālāk norādītajam gadījumam, kas kalpo kā sākotnējais vienotais saraksts, kurā tiks pievienoti iekšējo apakšsarakstu datu elementi.

Var teikt, ka šī pieeja ir diezgan ērta, jo mums nekas nav jāimportē. Tomēr tas ir lēnāks nekā itertools () un ķēde () funkcijas, ja ligzdotajā sarakstā ir liels skaits apakšsarakstu.

Apskatīsim šādu piemēru:

Piemērs:

 # 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) 

Izvade:

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

Paskaidrojums:

Iepriekš minētajā piemērā mēs esam definējuši ligzdoto sarakstu. Pēc tam mēs izmantojām summa () funkciju un saplacināja ligzdoto sarakstu viendimensionālā sarakstā un izdrukāja iegūto sarakstu lietotājiem. Rezultātā mēs esam veiksmīgi pārveidojuši sarakstu sarakstu par vienotu sarakstu.

Sarakstu saraksta saplacināšana, izmantojot Lambda atslēgvārdu

Mēs varam definēt anonīmu funkciju, izmantojot atslēgvārdu lambda . Mēs varam nodot parasto/neregulāro sarakstu kā parametru šai anonīmajai funkcijai. Izteiksmes novērtējums tiek veikts, lai iegūtu plakanu viendimensiju sarakstu.

Apskatīsim šādu piemēru:

Piemērs:

 # 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)) 

Izvade:

 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] 

Paskaidrojums:

kā java ģenerēt nejaušus numurus

Iepriekš minētajā piemērā esam definējuši ligzdotu sarakstu. Pēc tam mēs izmantojām lambda atslēgvārdu kopā ar argumentu, kas definē izteiksmi saraksta izpratnei. Pēc tam esam tos izdrukājuši lietotājiem. Rezultātā mēs esam veiksmīgi konvertējuši divdimensiju neregulāro sarakstu saplacinātā sarakstā.