Llista de comprensions a Python

List Comprehensions Python



Les comprensions de llista s’utilitzen sovint a Python per escriure sentències d’una sola línia que creen una nova llista o diccionari fent un bucle sobre un objecte iterable. En aquest article s'explicarà com s'utilitzen les comprensions de llista a Python, començant per una explicació bàsica de com funcionen els bucles a Python.

Per a Loop a Python

Una sentència per a bucle a Python itera de manera seqüencial els membres de qualsevol objecte, llista, cadena, etc. En comparació amb altres llenguatges de programació, la seva sintaxi és molt més neta i no requereix definir manualment els passos d’iteració i iniciar la iteració. Tot i que hi ha maneres de fer que el seu comportament sigui el mateix que altres llenguatges de programació (no es tractarà en aquest article). També podeu exercir un cert control sobre els bucles mitjançant instruccions com continuar, trencar, passar, etc. A continuació es mostra un exemple senzill de bucle for a Python:







perxdins abast(10):
imprimir(x)

El bucle for superior imprimirà deu números que comencen des de 0 i acaben en 9.



Comprensions de llista

La comprensió de la llista no és altra cosa que una forma abreujada / concisa d’escriure línies múltiples per a bucles en una declaració de línia única. L'exemple de comprensió de llista següent crearà una llista nova com a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] incloent-hi tots els valors de x.



números= [xperxdins abast(10)]
imprimir (números)

Tingueu en compte que la comprensió de la llista sempre crea una llista nova i no modifica els iterables originals que s’utilitzen a l’expressió. Una expressió típica de comprensió de llista ha de tenir una clàusula for i pot anar seguida d’afirmacions condicionals if i else. Sense fer servir una comprensió de llista, l’exemple anterior s’escriurà de la manera següent:





números= []
perxdins abast(10):
números.afegir(x)

imprimir (números)

Rendiment i llegibilitat

Les comprensions de llista són més ràpides que per als bucles. Tanmateix, tret que feu una iteració sobre centenars de milers d’elements, no notareu millores importants en el rendiment. Tot i que la comprensió de la llista proporciona una manera concisa d’escriure per a bucles, expressions complexes poden conduir a una poca llegibilitat del codi i a una major verbositat. És important que el codi es pugui llegir, tret que assolir el màxim rendiment sigui una necessitat absoluta per al vostre programa.

Exemple: Ús de sintaxi de comprensions de llista amb diccionaris i conjunts

Un diccionari python és una col·lecció d'elements definits en parells clau-valor mentre que un conjunt és una col·lecció de valors únics on no es permeten duplicats. Les comprensions de llista també es poden utilitzar amb diccionaris i conjunts de Python. La sintaxi difereix lleugerament, en lloc d'embolicar l'expressió entre claus, ara haureu d'utilitzar claus. També obtindreu un nou diccionari / objecte set en lloc d’una llista nova.



dades= {'ciutat':'Nova York', 'nom':'john doe'}

dades_formatades= {k: v.títol() pera,vdinsdades.articles()}

imprimir (dades_formatades)

L'exemple anterior convertirà els valors de les cadenes en majúscules i minúscules i crearà un diccionari nou anomenat formatted_data, la sortida del qual serà: {'city': 'New York', 'name': 'John Doe'}. També podeu canviar el diccionari / conjunt al lloc especificant la variable de diccionari existent a la part esquerra.

dades= {'ciutat':'Nova York', 'nom':'john doe'}

dades= {k: v.títol() pera,vdinsdades.articles()}

imprimir (dades)

Sense utilitzar comprensions de diccionari, el codi seria així:

dades= {'ciutat':'Nova York', 'nom':'john doe'}

dades_formatades= {}

pera,vdinsdades.articles():
dades_formatades[a] =v.títol()

imprimir (dades_formatades)

Com que no hi ha parells clau-valor en conjunts, es pot definir una comprensió de conjunt de la mateixa manera que una comprensió de llista. L’única diferència és l’ús de tirants arrissats.

Exemple: múltiple per a bucles en una comprensió de llista

L'exemple de comprensió de la llista esmentat anteriorment és bàsic i utilitza una sola sentència per a la declaració. A continuació es mostra un exemple que utilitza múltiples per a bucles i una sentència if condicional.

adjectius= ['Disc', 'Eoan', 'Focal', 'Artful']

animals= ['Dingo', 'Ermine', 'El pou', 'Castor']

noms de codi= [x +''+ iperxdinsadjectiusperidinsanimalssii.comença amb(x[0])]

imprimir (noms de codi)

El codi mostrarà ['Disco Dingo', 'Eoan Ermine', 'Focal Fossa'] com a sortida. Els dos bucles per a bucles reparteixen adjectius i llistes d’animals i els seus membres s’uneixen utilitzant un espai, només si la primera lletra de les dues paraules és la mateixa. Sense utilitzar comprensions de llista, el codi seria així:

adjectius= ['Disc', 'Eoan', 'Focal', 'Artful']
animals= ['Dingo', 'Ermine', 'El pou', 'Castor']

noms de codi= []

perxdinsadjectius:
peridinsanimals:
sii.comença amb(x[0]):
noms de codi.afegir(x +''+ i)

imprimir (noms de codi)

Exemple: comprensió de llista amb clàusula if-else

L'exemple següent mostrarà l'ús de sentències if i else a les comprensions de llista.

llista_número= [1, 2, 3, 4]
una altra_lista= [5, 6, 7, 8]

resultat= [És cert si (x + i)%2 == 0 en cas contrari Fals perxdinsllista_númeroperidinsuna altra_lista]

imprimir (resultat)

Mentre recorre dues llistes, la comprensió de la llista anterior comprova si la suma del parell d’elements és parella o no. L'execució del codi anterior us mostrarà [True, False, True, False, False, True, False, True, True, False, True, False, False, True, False, True] com a sortida. Sense fer servir la comprensió de la llista, el codi seria així:

llista_número= [1, 2, 3, 4]
una altra_lista= [5, 6, 7, 8]
resultat= []

perxdinsllista_número:
peridinsaltra_lista:
si (x + i)%2 == 0:
resultat.afegir(És cert)
en cas contrari:
resultat.afegir(Fals)

imprimir (resultat)

Conclusió

La comprensió de llistes proporciona una bona manera d’escriure sentències de bucle netes i concises. Tanmateix, poden ser complexos i difícils d’entendre si s’utilitzen múltiples bucles i sentències condicionals. Al final, arriba al nivell de comoditat d’un programador, però en general és una bona idea escriure codi explícit, llegible i fàcil de depurar en lloc d’utilitzar excessivament taquigrafies.