Re: [Python] or

2014-03-30 Per discussione Manlio Perillo
2014-03-29 18:38 GMT+01:00 Diego Barrera :

> On 18/03/2014 16:53, Manlio Perillo wrote:
>
>> 2014-03-18 16:46 GMT+01:00 Filippo Dal Bosco - <
>> filippo.dalbo...@whiteready.com>:
>>
>>  dalla lista row devo togliere alcune word in posizione variabile per
>>> costruire un' alta lista
>>>  exclude = {'', 'pippo', 'pluto'}
>>>
>>
>> # soluzione veloce:
>> print set(row) - exclude
>>
>>  Ho dato una ripassata veloce al tipo di dato set;
> esattamente quale e' l'utilizzo pratico di set?
> ( a parte il bellissimo esempio di codice quotato )
> Nel codice che leggo di solito mi sembra non averne mai visto l'utilizzo..
>
> A parte gli operatori/metodi di unione, intersezione, etc., che comunque
> posso implementare tramite le liste, mi sembra che non aggiungano niente:
> posso vivere tranquillamente senza? :)
>

Un set è concetto matematico; puoi certamente implementare i set tramite
liste (ed alcuni linguaggi lo fanno, e per pochi elementi va benissimo), ma
una implementazione specializzata offre prestazioni di molto migliori con
insiemi grandi.

Forse e' una questione di prestazioni?
>
>
Si.
Ma anche di convenienza.
Se implementi i set con una lista, devi garantire tu che la lista sia
ordinata; in Python poi hai anche la "convenienza" di poter usare operatori
dedicati.


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-30 Per discussione Marco Buttu

On 03/29/2014 06:38 PM, Diego Barrera wrote:

Ho dato una ripassata veloce al tipo di dato set;
esattamente quale e' l'utilizzo pratico di set?
( a parte il bellissimo esempio di codice quotato )
Nel codice che leggo di solito mi sembra non averne mai visto 
l'utilizzo.. 
Ad esempio, supponiamo di avere una lista di indirizzi IP, dove ogni 
indirizzo rappresenta una richiesta arrivata al tuo sito web:


>>> hits = ['IP1', 'IP2', 'IP3', 'IP1', 'IP4', 'IP2']

Hai avuto 2 richieste sia da IP1 che da IP2, una da IP3 e una da IP4.
Se vuoi sapere quali sono i tuoi visitatori unici, puoi farlo in modo 
immediato utilizzando un set:


>>> unique_visitors = set(hits)
>>> unique_visitors
set(['IP2', 'IP3', 'IP1', 'IP4'])

Se ci pensi un attimo, ti verranno in mente una miriade di altri casi 
d'uso ;)


--
Marco Buttu

INAF-Osservatorio Astronomico di Cagliari
Via della Scienza n. 5, 09047 Selargius (CA)
Phone: 070 711 80 217
Email: mbu...@oa-cagliari.inaf.it

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-29 Per discussione lordkrandel

On 29/03/2014 20:02, Diego Barrera wrote:

>>>{1,1,5,1352467,12,1,5,2} | {2,7,3,54,6,21,1,45,6,87}
{1, 2, 3, 5, 6, 7, 12, 45, 1352467, 21, 54, 87}

Certo che puoi reimplementarli daccapo, ma perché ??

Posso dire che trovano molto impiego in calcoli matematici?
Grazie mille

PS: i tuoi insiemi contengono solo numeri.. e' un indizio o ci sono 
solo numeri

perche' e' piu' veloce l'inserimento?

E' solo un esempio a caso, con la cosa piú veloce da scrivere :D !

Serve molto anche se lavori con i Database.
Metti caso che hai 300 clienti e 300 fornitori, ognuno con la sua cittá 
di appartenenza.
Hai estratto con SQL i due elenchi delle cittá, ma vuoi unirli e non 
avere duplicati.

>>> {'Mantova', 'Cremona'} | {'Cremona', 'Lucca'}
{'Lucca', 'Cremona', 'Mantova'}

Possono anche essere insiemi con tipi eterogenei...
>>> {'Mantova', 'Cremona'} | {'Cremona', 'Lucca', 3}
{3, 'Lucca', 'Cremona', 'Mantova'}


--
Paolo Gatti

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-29 Per discussione Diego Barrera

On 29/03/2014 19:06, lordkrandel wrote:

Il tipo "set" é la rappresentazione di un insieme.
Effettivamente dal punto di vista logico i set e le liste rappresentano 
due oggetti differenti.


L'intersezione, la differenza e la deduplicazione sono operazioni 
molto comode

con questo tipo di dati, specie se la sintassi é cosí zuccherosa:

>>>{1,1,5,1352467,12,1,5,2} | {2,7,3,54,6,21,1,45,6,87}
{1, 2, 3, 5, 6, 7, 12, 45, 1352467, 21, 54, 87}

Certo che puoi reimplementarli daccapo, ma perché ??

Posso dire che trovano molto impiego in calcoli matematici?
Grazie mille

PS: i tuoi insiemi contengono solo numeri.. e' un indizio o ci sono solo 
numeri

perche' e' piu' veloce l'inserimento?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-29 Per discussione Diego Barrera

On 29/03/2014 19:03, Daniele Zambelli wrote:

Il 29 marzo 2014 18:38, Diego Barrera  ha scritto:

Ho dato una ripassata veloce al tipo di dato set;
esattamente quale e' l'utilizzo pratico di set?

La differenza fondamentale è che in un insieme gli elementi non sono ripetuti.


Ah! Giusto!
Ti ringrazio

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-29 Per discussione lordkrandel

On 29/03/2014 18:38, Diego Barrera wrote:

esattamente quale e' l'utilizzo pratico di set?
[...]
A parte gli operatori/metodi di unione, intersezione, etc., che comunque
posso implementare tramite le liste, 

Il tipo "set" é la rappresentazione di un insieme.

L'intersezione, la differenza e la deduplicazione sono operazioni molto 
comode

con questo tipo di dati, specie se la sintassi é cosí zuccherosa:

>>>{1,1,5,1352467,12,1,5,2} | {2,7,3,54,6,21,1,45,6,87}
{1, 2, 3, 5, 6, 7, 12, 45, 1352467, 21, 54, 87}

Certo che puoi reimplementarli daccapo, ma perché ??

--
Paolo Gatti

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-29 Per discussione Daniele Zambelli
Il 29 marzo 2014 18:38, Diego Barrera  ha scritto:
> Ho dato una ripassata veloce al tipo di dato set;
> esattamente quale e' l'utilizzo pratico di set?

La differenza fondamentale è che in un insieme gli elementi non sono ripetuti.

-- 

Daniele

www.fugamatematica.blogspot.com

giusto!
nel verso
forse è perché non guardiamo le cose
Quando non ci capiamo,
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-29 Per discussione Diego Barrera

On 18/03/2014 16:53, Manlio Perillo wrote:

2014-03-18 16:46 GMT+01:00 Filippo Dal Bosco - <
filippo.dalbo...@whiteready.com>:


dalla lista row devo togliere alcune word in posizione variabile per
costruire un' alta lista

Per come funziona " or " in python questo sotto non va

stamp=[]
for word in row:
  if (word !=  ' ' , or  word != 'pippo'  or  word != 'pluto'):
stamp.append(word)
  print(stamp)

qual' è la migliore soluzione?



exclude = {'', 'pippo', 'pluto'}

# soluzione veloce:
print set(row) - exclude


Ho dato una ripassata veloce al tipo di dato set;
esattamente quale e' l'utilizzo pratico di set?
( a parte il bellissimo esempio di codice quotato )
Nel codice che leggo di solito mi sembra non averne mai visto l'utilizzo..

A parte gli operatori/metodi di unione, intersezione, etc., che comunque
posso implementare tramite le liste, mi sembra che non aggiungano niente:
posso vivere tranquillamente senza? :)
Forse e' una questione di prestazioni?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-19 Per discussione Diego Barrera

On 19/03/2014 19:03, Balan Victor wrote:

Ho visto che per esclude usate una lista. In presenza di tanti elementi
nella lista exclude non è più efficiente usare un dictionary?

Scusami, ma non ti seguo; puoi fare un esempio?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-19 Per discussione Andrea Ambu
2014-03-19 18:03 GMT+00:00 Balan Victor :

> Ho visto che per esclude usate una lista. In presenza di tanti elementi
> nella lista exclude non è più efficiente usare un dictionary?
>
Un set [0] ancora meglio.

-- 
Andrea

[0 ]http://docs.python.org/2/library/sets.html
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-19 Per discussione Balan Victor
Ho visto che per esclude usate una lista. In presenza di tanti elementi
nella lista exclude non è più efficiente usare un dictionary?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Diego Barrera

Il 18/03/2014 16:46, Filippo Dal Bosco - ha scritto:

dalla lista row devo togliere alcune word in posizione variabile per
costruire un' alta lista

Per come funziona " or " in python questo sotto non va
  
stamp=[]

for word in row:
  if (word !=  ' ' , or  word != 'pippo'  or  word != 'pluto'):
stamp.append(word)
  print(stamp)

qual' è la migliore soluzione?

grazie


parole_escluse = ["pippo", "pluto", "paperino"]
filtro = lambda x: x not in parole_escuse

row = filter(filtro, row)

Rigorosamente non testato! :)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Marco Gagliano
+1
On 14-03-18 11:53 AM, Marco Beri wrote:
> stamp = [word for word in row if word not in (' ', 'pippo', 'pluto')]

-- 
Marco Gagliano

___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Lorenzo Sutton

On 18/03/2014 17:25, Filippo Dal Bosco - wrote:

Il giorno Tue, 18 Mar 2014 16:53:42 +0100
Marco Beri  ha scritto:


2014-03-18 16:46 GMT+01:00 Filippo Dal Bosco - <
filippo.dalbo...@whiteready.com>:

[...]
 una lista che non contiene

' ', 'pippo' , 'pluto'


Allora vuoi che tutte e tre le condizioni siano soddisfatte allo stesso 
tempo: quindi un and.. per esempio


>>> l = [' ', 'pippo', 'pluto', 'peppa pig', 'mario', 'foo', 'homer']
>>> new_list = []
>>> for word in l:
if word != ' ' and word != 'pippo' and word != 'pluto':
print word, "oh yes!"
new_list.append(word)
else:
print word, 'bye bye..'


  bye bye..
pippo bye bye..
pluto bye bye..
peppa pig oh yes!
mario oh yes!
foo oh yes!
homer oh yes!
>>> new_list
['peppa pig', 'mario', 'foo', 'homer']

Qualche altro esempio...
>>> word == 'pippo'
>>> word == ' ' or word == 'pippo' or word == 'pluto'
True
>>> word != ' ' or word != 'pippo' or word != 'pluto'
True
>>> word2 = 'mario'
>>> word2 == ' ' or word == 'pippo' or word == 'pluto'
True
>>> word2 == ' ' or word2 == 'pippo' or word2 == 'pluto'
False
>>> word2 != ' ' or word2 != 'pippo' or word2 != 'pluto'
True
>>> word2 != ' ' and word2 != 'pippo' and word2 != 'pluto'
True
>>> not word == ' ' or not word == 'pippo' or not word == 'pluto'
True
>>> not word2 == ' ' or not word2 == 'pippo' or not word2 == 'pluto'
True

Ciao
Lorenzo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Marco Beri
2014-03-18 17:25 GMT+01:00 Filippo Dal Bosco - <
filippo.dalbo...@whiteready.com>:

> or  ( in logica  "v" dal "vel" latino)  dovrebbe significare  per una
> lista di oggetti : uno o più fino anche a tutti .
>
> Nel caso specifico : se word NON è   ' ', 'pippo' , 'pluto' appendi il
> suo contenuto a stamp
>
> Anche togliendo in python la ","  non ottengo una lista che non contiene
> ' ', 'pippo' , 'pluto'
>

La virgola andava tolta perché era un errore, non per far funzionare il
resto.


> io non sono un programmatore ma mi sembra di ricordare che in Dbase e
> clipper ( vecchio dos) una serie di "or" otteneva  questo effetto.
>

Sbagli: ho programmato molti anni in Clipper e ti posso garantire che l'OR
funzionava come in Python :-)

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Massimiliano Modena
Il giorno 18 marzo 2014 17:25, Filippo Dal Bosco - <
filippo.dalbo...@whiteready.com> ha scritto:

> Il giorno Tue, 18 Mar 2014 16:53:42 +0100
> Marco Beri  ha scritto:
>
> > 2014-03-18 16:46 GMT+01:00 Filippo Dal Bosco - <
> > filippo.dalbo...@whiteready.com>:
>
> > Or in python funziona come in tutto il resto del mondo.
> >
> > E come dovrebbe funzionare secondo te?
>
> or  ( in logica  "v" dal "vel" latino)  dovrebbe significare  per una
> lista di oggetti : uno o più fino anche a tutti .
>
> Nel caso specifico : se word NON è   ' ', 'pippo' , 'pluto' appendi il
> suo contenuto a stamp
>
> Anche togliendo in python la ","  non ottengo una lista che non contiene
> ' ', 'pippo' , 'pluto'
>
> io non sono un programmatore ma mi sembra di ricordare che in Dbase e
> clipper ( vecchio dos) una serie di "or" otteneva  questo effetto.
>
>
>
>
> --
> Filippo
> ___
>
> Non sono un programmatore python ma, se leggi bene quell'if è:
se la parola non è "pippo" o non è "pluto" , la condizione è sempre vera.
Perché una delle due è sempre vera.
La più comoda sono le list comprension come diceva Marco.
Altrimenti se usi l'or devi cercare l'uguaglianza, altrimenti usa
l'operatore and con la diseguaglianza.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Filippo Dal Bosco -
Il giorno Tue, 18 Mar 2014 16:53:42 +0100
Marco Beri  ha scritto:

> 2014-03-18 16:46 GMT+01:00 Filippo Dal Bosco - <
> filippo.dalbo...@whiteready.com>:

> Or in python funziona come in tutto il resto del mondo.
> 
> E come dovrebbe funzionare secondo te?

or  ( in logica  "v" dal "vel" latino)  dovrebbe significare  per una
lista di oggetti : uno o più fino anche a tutti .

Nel caso specifico : se word NON è   ' ', 'pippo' , 'pluto' appendi il
suo contenuto a stamp

Anche togliendo in python la ","  non ottengo una lista che non contiene
' ', 'pippo' , 'pluto'

io non sono un programmatore ma mi sembra di ricordare che in Dbase e
clipper ( vecchio dos) una serie di "or" otteneva  questo effetto.




-- 
Filippo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Marco Beri
2014-03-18 16:46 GMT+01:00 Filippo Dal Bosco - <
filippo.dalbo...@whiteready.com>:

> dalla lista row devo togliere alcune word in posizione variabile per
> costruire un' alta lista
>
> Per come funziona " or " in python questo sotto non va
>

Or in python funziona come in tutto il resto del mondo.

E come dovrebbe funzionare secondo te?

stamp=[]
> for word in row:
>  if (word !=  ' ' , or  word != 'pippo'  or  word != 'pluto'):
>stamp.append(word)
>  print(stamp)
>
> qual' è la migliore soluzione?
>

Togliere la virgola dopo ' '

Comunque il modo migliore è, a mio parere, usando la list comprehension:

stamp = [word for word in row if word not in (' ', 'pippo', 'pluto')]

Ciao.
Marco.

-- 
http://beri.it/ - Un blog
http://beri.it/i-miei-libri/ - Qualche libro
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Marco De Paoli
Il giorno 18 marzo 2014 16:46, Filippo Dal Bosco - <
filippo.dalbo...@whiteready.com> ha scritto:

> dalla lista row devo togliere alcune word in posizione variabile per
> costruire un' alta lista
>
> Per come funziona " or " in python questo sotto non va
>
> stamp=[]
> for word in row:
>  if (word !=  ' ' , or  word != 'pippo'  or  word != 'pluto'):
>stamp.append(word)
>  print(stamp)
>

mi sa che c'è un errore sintattico
...c'è una virgola che non mi convince dopo " word !=  ' ' "


> qual' è la migliore soluzione?
>

a me piace questa:

>>> source = ['ciao', 'pino', '', 'pippo']
>>> exclude = ['', 'pippo', 'pluto']
>>> [w for w in source if w not in exclude]
['ciao', 'pino']

ciao,
Marco
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] or

2014-03-18 Per discussione Manlio Perillo
2014-03-18 16:46 GMT+01:00 Filippo Dal Bosco - <
filippo.dalbo...@whiteready.com>:

> dalla lista row devo togliere alcune word in posizione variabile per
> costruire un' alta lista
>
> Per come funziona " or " in python questo sotto non va
>
> stamp=[]
> for word in row:
>  if (word !=  ' ' , or  word != 'pippo'  or  word != 'pluto'):
>stamp.append(word)
>  print(stamp)
>
> qual' è la migliore soluzione?
>
>
exclude = {'', 'pippo', 'pluto'}

# soluzione veloce:
print set(row) - exclude

# oppure:
for word in row:
if word not in exclude:
stamp.append(word)


Questo se ho capito correttamente quello che vuoi fare


Ciao  Manlio
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python