Ako vytvoriť zoznam zoznamov v Pythone – jednoduché!

Aký Film Vidieť?
 
  Ako vytvoriť zoznam zoznamov v Pythone – jednoduché!

Dnes uvidíme, ako vytvoriť zoznam zoznamov v Pythone. Existuje viacero spôsobov, ako to urobiť. Začnime a pozrime sa na niektoré metódy.





Pre Loop a metódu append().

Prvá metóda je pomerne jednoduchá a priamočiara. Najprv vytvoríme prázdny zoznam lst1 , potom spustíme cyklus a pripojíme zoznamy lst1 .



Ak chceme vložiť n podzoznamy, potom budeme musieť spustiť cyklus n krát pomocou rozsah() funkciu. Poďme pochopiť tento koncept pomocou príkladu.



lst1 = []
for i in range(0, 5):
  lst1.append([])
print(lst1)

Výkon



šteňa narodené s jedným okom
[[], [], [], [], []]

Tu sa slučka spustí päťkrát. V každej iterácii pripájame prázdny zoznam lst1 , čo nám umožňuje vytvárať zoznam zoznamov, ako môžete vidieť vo výstupe.

Porozumenie zoznamu

Ďalšou metódou je použitie porozumenia zoznamu, ktoré nám poskytuje jednoduchší a stručnejší spôsob. Pozrime sa na príklad.

lst  = [[] for i in range(0, 5)]
print(lst)

Výkon

[[], [], [], [], []]

Porozumenie zoznamu vždy vráti zoznam, ktorého obsah závisí od výrazov v slučke for a podmienky if (ak existuje).

Vo vyššie uvedenom príklade pridávame podzoznam pri každom spustení cyklu, a preto výsledok obsahuje zoznam zoznamov.

Knižnica NumPy

Ďalším spôsobom, ako vytvoriť zoznam zoznamov, je NumPy . Je to výkonná knižnica pre vedecké výpočty.

Poskytuje niekoľko metód a nástrojov na efektívne vytváranie multidimenzionálnych polí a prácu s nimi.

Zoznam zoznamov môžeme vytvoriť pomocou prázdne () metóda knižnice NumPy. Musíme odovzdať n-ticu obsahujúcu veľkosť riadku a veľkosť stĺpca.

Vyžaduje si to aj typ údajov. V predvolenom nastavení vytvorí pole typu numpy.float64 .

Okrem toho vracia ndarray (N-dimenzionálne pole) pevnej veľkosti a typu. Na prevod na zoznam použijeme listovať() metóda.

Zvážte nasledujúci kód:

ian veneracion a pamela gallardo
import numpy as np
np_array = np.empty((5, 0))
lst = np_array.tolist()
print(lst)
print(f"Type of np_array: {type(np_array)} and the type of lst: {type(lst)}")

Výkon

[[], [], [], [], []]
Type of np_array: <class 'numpy.ndarray'> and the type of lst: <class 'list'>

To isté môžeme urobiť pomocou numpy.ndarray() metóda. Pozrime sa.

import numpy as np
np_array = np.ndarray((5, 0))
lst = np_array.tolist()
print(lst)

[[], [], [], [], []]

Funkcia map().

Môžeme tiež vytvoriť zoznam zoznamov pomocou vstavaného Pythonu mapa() funkciu. mapa() má dva argumenty: funkciu a iterovateľný.

ja t volá danú funkciu pre každú položku iterovateľného a vracia iterátor. Zvážte nasledujúci príklad.

n=5
lst = [None]*n
lst = list(map(lambda x: [], lst))
print(lst)

Výkon

[[], [], [], [], []]

Najprv vytvoríme zoznam n prvky obsahujúce žiadne . Potom tento zoznam odovzdáme map().

Každá položka vonkajšieho zoznamu sa pomocou anonymnej funkcie namapuje na prázdny zoznam. Nakoniec vrátený iterátor (mapový objekt) skonvertujeme na zoznam, aby sme získali zoznam zoznamov.

Čo nerobiť

Jednorozmerný zoznam môžeme vytvoriť nasledujúcim spôsobom.

lst = [None]*n

Tu, lst bude mať veľkosť n a každá položka bude mať hodnotu žiadne . Inými slovami, akákoľvek hodnota, ktorú vložíme do hranatých zátvoriek, sa zopakuje n krát.

Takže ak do nej vložíme [], dostaneme zoznam zoznamov, nie? No, áno, ale každá položka odkazuje na rovnaký objekt (prvý). Jednoducho povedané, dostaneme n rovnaké podzoznamy. Pozrime sa.

n=5
lst = [[]]*n
print(lst)
#append an item to the last list
lst[n-1].append(3)
print(lst)

Výkon

[[], [], [], [], []]
[[3], [3], [3], [3], [3]]

alex o Loughlin si zlomil ruku

Zvážte iný kód.

n=5
lst = []
new_list =  [lst for i in range(0, n)]
#append an item to the last list
new_list[n-1].append(3)
print(lst)
print(new_list)

Tento vyššie uvedený kód tiež vytvára päť odkazov na premennú lst . Takže, nový_zoznam[0], nový_zoznam[1], … nový_zoznam[n-1] odkazujú na rovnakú adresu, na ktorú lst .

Výkon

[3]
[[3], [3], [3], [3], [3]]

Použite lst[:] namiesto lst alebo skopírujte zoznam explicitne pomocou kopírovať () z kopírovať modul.