[Python] list comprehension e .append()

simone gabbriellini simone.gabbriellini a gmail.com
Ven 22 Gen 2010 17:32:09 CET


Salve,

se le cose stessero invece così:

a = sum([True for element in lista if sum(element.id ==1 and element.attribute)==0])
b = sum([True for element in lista if sum(element.id ==1 and  element.attribute)==1])
c = sum([True for element in lista if sum(element.id ==1 and  element.attribute)==2])
d = sum([True for element in lista if sum(element.id ==1 and  element.attribute)==3])
e = sum([True for element in lista if sum(element.id ==1 and  element.attribute)==4])

a2 = sum([True for element in lista if sum(element.id ==2 and element.attribute)==0])
b2 = sum([True for element in lista if sum(element.id ==2 and  element.attribute)==1])
c2= sum([True for element in lista if sum(element.id ==2 and  element.attribute)==2])
d2 = sum([True for element in lista if sum(element.id ==2 and  element.attribute)==3])
e2 = sum([True for element in lista if sum(element.id ==2 and  element.attribute)==4])

consiglieresti un dizionario di dizionari oppure un dizionario che come value abbia delle liste?

grazie ancora,
simone

Il giorno 22/gen/2010, alle ore 00.57, Marco Beri ha scritto:

> 2010/1/22 simone gabbriellini <simone.gabbriellini a gmail.com>
> Salve,
> una curiosità da neofita.
> esiste un modo per scrivere in modo più conciso e performante il seguente codice?
> 
> a = sum([True for element in lista if sum(element.attribute)==0])
> b = sum([True for element in lista if sum(element.attribute)==1])
> c = sum([True for element in lista if sum(element.attribute)==2])
> d = sum([True for element in lista if sum(element.attribute)==3])
> e = sum([True for element in lista if sum(element.attribute)==4])
> 
> in questo caso avevo pensato a:
> 
> a=[]
> b=[]
> c=[]
> d=[]
> e=[]
> for element in lista:
>        if sum(element.attribute) ==0:
>                a.append(....)
>        elif ....
>        .....
> 
> in questo modo si riduce il numero di volte che scorro "lista", giusto?
> ma è effettivamente il modo corretto di affrontare una struttura logica come questa?
> 
> Mi piace di piu` cosi`:
> 
> >>> d = dict((i, sum([1 for e in lista if sum(e.attribute) == i])) for i in range(5))
> 
> In d hai un dizionario ma se vuoi a tutti i costi i risultati in a, b, c, d, e dopo puoi:
> 
> >>> a, b, c, d, e = [d.get(i, 0) for i in range(5)]
> 
> Ciao.
> Marco.
> 
> -- 
> http://python.thinkcode.tv - Videocorso di Python
> http://stacktrace.it - Aperiodico di resistenza informatica
> http://beri.it - Blog di una testina di vitello
> 
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python



Maggiori informazioni sulla lista Python