[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