Kaip sudaryti Python sąrašų sąrašą – paprasta!

Šiandien pamatysime, kaip sukurti Python sąrašų sąrašą. Yra keletas būdų tai padaryti. Pradėkime ir pažiūrėkime kai kuriuos metodus.

Ciklo ir append() metodui

Pirmasis metodas yra gana paprastas ir aiškus. Iš pradžių sudarome tuščią sąrašą lst1 , tada vykdome kilpą ir pridedame sąrašus lst1 .



Jei norime įterpti n posąraščius, tada turėsime paleisti kilpą n kartus naudojant diapazonas() funkcija. Supraskime šią sąvoką naudodami pavyzdį.

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

Išvestis

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

Čia kilpa veikia penkis kartus. Kiekvienoje iteracijoje pridedame tuščią sąrašą lst1 , kuri leidžia mums sukurti sąrašų sąrašą, kaip matote išvestyje.

Sąrašo supratimas

Kitas būdas yra naudoti sąrašo supratimą, kuris suteikia mums lengvesnį ir glaustą būdą. Pažiūrėkime pavyzdį.

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

Išvestis

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

Sąrašo supratimas visada grąžina sąrašą, kurio turinys priklauso nuo išraiškų cikle ir jei sąlygos (jei yra).

Aukščiau pateiktame pavyzdyje pridedame posąrašį kiekvieną kartą, kai vyksta ciklas, taigi rezultate yra sąrašų sąrašas.

NumPy biblioteka

Kitas būdas sudaryti sąrašų sąrašą yra NumPy . Tai galinga biblioteka moksliniams skaičiavimams.

Jame pateikiami keli metodai ir įrankiai, leidžiantys efektyviai kurti ir dirbti su daugiamačiais masyvais.

Sąrašų sąrašą galime sudaryti naudodami tuščia() NumPy bibliotekos metodas. Turime perduoti eilutę, kurioje yra eilutės ir stulpelio dydis.

Taip pat reikia duomenų tipo. Pagal numatytuosius nustatymus jis sukurs tipo masyvą nelygus.plūdė64 .

Be to, jis grąžina fiksuoto dydžio ir tipo ndarray (N-dimensinis masyvas). Norėdami konvertuoti jį į sąrašą, naudosime išvardinti() metodas.

Apsvarstykite šį kodą:

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)}")

Išvestis

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

Tą patį galime padaryti naudodami numpy.ndarray() metodas. Pažiūrėkime.

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

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

Funkcija map().

Taip pat galime sukurti sąrašų sąrašą naudodami Python integruotą žemėlapis () funkcija. žemėlapis () turi du argumentus: funkciją ir iteruojamą.

t iškviečia nurodytą funkciją kiekvienam iteruojamo elemento elementui ir grąžina iteratorių. Apsvarstykite toliau pateiktą pavyzdį.

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

Išvestis

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

Pirmiausia sudarome sąrašą n elementai, kuriuose yra Nė vienas . Tada šį sąrašą perduodame map ().

Kiekvienas išorinio sąrašo elementas susiejamas su tuščiu sąrašu naudojant anoniminę funkciją. Galiausiai grąžintą iteratorių (žemėlapio objektą) konvertuojame į sąrašą, kad gautume sąrašų sąrašą.

Ko nedaryti

Vienmatį sąrašą galime sudaryti tokiu būdu.

lst = [None]*n

Čia lst bus dydžio n , ir kiekvienas elementas turės vertę Nė vienas . Kitaip tariant, bet kokia reikšmė, kurią įdedame į laužtinius skliaustus, kartojasi n laikai.

Taigi, jei į jį įdėsime [], tada gausime sąrašų sąrašą, ar ne? Na, jūs darote, bet kiekvienas elementas nurodo tą patį objektą (pirmasis). Paprasčiau tariant, mes gauname n tie patys subsąrašai. Pažiūrėkime.

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

Išvestis

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

Apsvarstykite kitą kodą.

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)

Šis aukščiau pateiktas kodas taip pat sukuria penkias kintamojo nuorodas lst . Taigi, naujas_sąrašas[0], naujas_sąrašas[1], … naujas_sąrašas[n-1] nurodo tą patį adresą, nurodytą lst .

Išvestis

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

Naudokite lst[:] vietoj lst arba aiškiai nukopijuokite sąrašą naudodami kopija () nuo kopija modulis.