2D masīva pārveidošanu 1D masīvā sauc par saplacināšanu. Ir daudzas pieejas problēmas risināšanai.
Mēs izpētīsim dažus no tiem šajā apmācībā.
Apskatīsim piemēru.
Ievade
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
Izvade
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1. Cilpas
Visizplatītākais veids, kā atrisināt problēmu, ir izmantot cilpas. Es domāju, ka lielākā daļa no jums to jau ir sapratuši. Apskatīsim darbības, lai atrisinātu problēmu, izmantojot cilpas.
- Inicializējiet sarakstu sarakstu ar fiktīviem datiem un nosauciet to kā datus.
- Tagad inicializējiet tukšu sarakstu ar nosaukumu flat_list.
- Atkārtojiet datus.
- Izpakojiet visus elementus no pašreizējā saraksta.
- Pievienojiet tos sarakstam flat_list, izmantojot saraksta pievienošanas metodi.
- Izdrukājiet rezultātu.
Tālāk skatiet problēmas kodu.
# initializing the data and an empty list data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # iterating over the data for item in data: # appending elements to the flat_list flat_list += item # printing the resultantn flat_list print(flat_list)
Varat izmantot citu cilpu, lai pievienotu apakšsaraksta elementus sarakstam flat_list, nevis savienošanas operatoru. Cilpu vietā varam izmantot arī saraksta izpratni.
Abi dara vienu un to pašu darbu. Apskatīsim nākamo problēmas risināšanas veidu.
#2. Itertools — ķēde
Mēs izmantosim metodi, ko sauc par ķēdi no itertools iebūvētā moduļa.
Metodes ķēde atkārto katru apakšsarakstu un atgriež elementus, līdz tajā vairs nav neviena apakšsaraksta. Tas atgriež atkārtojamību, kas mums ir jāpārvērš sarakstā.
Apskatīsim problēmas risināšanas darbības.
- Inicializējiet sarakstu sarakstu ar fiktīviem datiem un nosauciet to kā datus.
- Iegūstiet saplacināto iterējamo versiju, izmantojot itertools.chain(*data).
- Konvertējiet iegūto iterable sarakstā.
- Izdrukājiet saplacināto sarakstu.
Tālāk esošajā fragmentā varat iet cauri kodam.
# importing the module import itertools # initializing the data data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # flattening the list and storing the result flat_list = itertools.chain(*data) # converting iterable to list and printing print(list(flat_list))
#3. Saplaciniet daudzlīmeņu sarakstus
Mēs esam redzējuši, kā saplacināt sarakstu sarakstu. Iepriekš minētās metodes, par kurām mēs runājām, lai saplacinātu sarakstu, nedarbosies daudzlīmeņu sarakstiem. Apskatīsim piemēru.
Ievade
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
Izvade
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Tā kā mēs nezinām sarakstu dziļumu pirms programmas, mums ir jāizmanto rekursija, lai atrisinātu problēmu.
- Inicializējiet datus, kā parādīts piemērā, un nosauciet tos kā datus.
- Inicializējiet tukšu sarakstu ar nosaukumu flat_list.
- Uzrakstiet funkciju flatten_list.
- Atkārtojiet dotā saraksta elementus.
- Ja elements ir saraksts, atkārtoti izsauciet to pašu funkciju.
- Ja elements nav saraksts, pievienojiet elementu flat_list.
- Izsaukt funkciju ar datiem.
- Funkcija aizpildīs visus flat_list saraksta elementus.
- Izdrukājiet flat_list, lai pārbaudītu izvadi.
Fu! kodēšanai jāveic daudz darbību. Neuztraucieties. Iepriekš minēto paziņojumu konvertēšana kodā neaizņems vairāk par minūtēm.
# initializing the data and empty list data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # function def flatten_list(data): # iterating over the data for element in data: # checking for list if type(element) == list: # calling the same function with current element as new argument flatten_list(element) else: flat_list.append(element) # flattening the given list flatten_list(data) # printing the flat_list print(flat_list)
Atcerieties, ka mēs nekonvertējām esošo sarakstu. Tā vietā esam izveidojuši jaunu sarakstu ar norādīto saraksta elementu.
Secinājums
Cerams, ka jums patika apmācība. Varētu būt daudz citu veidu, kā Python sarakstu saplacināt, taču man šķita, ka iepriekš minētie, iespējams, ir vienkāršākie.
Laimīgu kodēšanu 🙂