[Python] Dividere stringa in parti uguali

2008-05-22 Per discussione Mr . SpOOn
Salve,
avevo bisogno di una funzione che mi dividesse una stringa in tante
sottostringhe di lunghezza uguale, assegnandole a una lista.

Ho fatto una cosa del genere:

def dividiMessaggio(self, size=4, messaggio):
listaParole = []
i = 0
while (i < len(messaggio)):
   listaParole.append(messaggio[i:i+size])
   i = i + size
return listaParole

Esiste un metodo più elegante o diretto?
Grazie.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Dividere stringa in parti uguali

2008-05-22 Per discussione Daniele Varrazzo
Mr.SpOOn ha scritto:
> Salve,
> avevo bisogno di una funzione che mi dividesse una stringa in tante
> sottostringhe di lunghezza uguale, assegnandole a una lista.
> 
> Ho fatto una cosa del genere:
> 
> def dividiMessaggio(self, size=4, messaggio):
> listaParole = []
> i = 0
> while (i < len(messaggio)):
>listaParole.append(messaggio[i:i+size])
>i = i + size
> return listaParole
> 
> Esiste un metodo più elegante o diretto?

Per esempio:

   return [ messaggio[i:i+size] for i in xrange(0, len(messaggio), size) ]

che è quello che hai scritto tu ma in una list comprehension.

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Dividere stringa in parti uguali

2008-05-22 Per discussione simone
Mr.SpOOn ha scritto:
> Salve,
> avevo bisogno di una funzione che mi dividesse una stringa in tante
> sottostringhe di lunghezza uguale, assegnandole a una lista.
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496784

Sinceramente ci vuole un po' per capirla, però funziona.

Simone
Chiacchiera con i tuoi amici in tempo reale! 
 http://it.yahoo.com/mail_it/foot/*http://it.messenger.yahoo.com 

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


Re: [Python] Dividere stringa in parti uguali

2008-05-22 Per discussione Masci
On Thu, May 22, 2008 at 3:12 PM, simone <[EMAIL PROTECTED]> wrote:
> Mr.SpOOn ha scritto:
>> Salve,
>> avevo bisogno di una funzione che mi dividesse una stringa in tante
>> sottostringhe di lunghezza uguale, assegnandole a una lista.
> http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496784
>
> Sinceramente ci vuole un po' per capirla, però funziona.
Però questa a differenza di quella di Daniele se

len(s) % count != 0

scarta l'ultimo chunk. Cmq nei commenti alla ricetta qualcuno suggerisce

def split_len(seq, length):
 return [seq[i:i+length] for i in range(0, len(seq), length)]

che è uguale a quella di Daniele ma meno "smart" (usa range invece di xrange)


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


Re: [Python] Dividere stringa in parti uguali

2008-05-22 Per discussione Mr . SpOOn
On 5/22/08, Masci <[EMAIL PROTECTED]> wrote:

> Però questa a differenza di quella di Daniele se
>
>  len(s) % count != 0
>
>  scarta l'ultimo chunk. Cmq nei commenti alla ricetta qualcuno suggerisce
>
>  def split_len(seq, length):
>  return [seq[i:i+length] for i in range(0, len(seq), length)]
>
>  che è uguale a quella di Daniele ma meno "smart" (usa range invece di xrange)

Mi piace la soluzione di Daniele.
Ma qual è il vantaggio di usare xrange piuttosto che range?
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] getopt

2008-05-22 Per discussione Paolo




Ciao a tutti,
ho qualche domanda da fare sulla funzione getopt:

Da riga di comando l'utente può inserire comandi del tipo:
    prova -p arg1 arg2 arg3 arg4
    prova -c arg1 arg2

come posso utilizzare la funzione getopt in modo da ottenere come
opzioni -p oppure -c e come argomenti gli argomenti relativi al tipo di
opzione ?
Mi spiego meglio con un esempio:

prova -p 0 /home/paolo/file.txt read
mi servirebbe avere:     opt = -p
                                     args = 0 /home/paolo/file.txt read
args mi serve come array: 
args[0] = 0 
args[1] = /home/paolo/file.txt

args[3] = read

PS: ovviamente devo anche verificare che la stringa di ingresso
corriposnda alle possibili opzioni.

Grazie a tutti.

Paolo


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


Re: [Python] getopt

2008-05-22 Per discussione Alessandro Dentella
On Thu, May 22, 2008 at 09:48:39PM +0200, Paolo wrote:
> Ciao a tutti,
> ho qualche domanda da fare sulla funzione getopt:
> 
> Da riga di comando l'utente può inserire comandi del tipo:
> prova -p arg1 arg2 arg3 arg4
> prova -c arg1 arg2
> 
> come posso utilizzare la funzione getopt in modo da ottenere come opzioni -p
> oppure -c e come argomenti gli argomenti relativi al tipo di opzione ?
> Mi spiego meglio con un esempio:
> 
> prova -p 0 /home/paolo/file.txt read
> mi servirebbe avere: opt = -p
>  args = 0 /home/paolo/file.txt read
> args mi serve come array:
> args[0] = 0
> args[1] = /home/paolo/file.txt
> args[3] = read

io mi trovo molto bene con questa ricetta di michele Simionato che usa la
docsctring stessa, opportunamente (ed intuitivamente) formattata sia per
l'help che per la definizione delle opzioni. Così ti trovi sempre
obbligatoriamente l'help corretto

  http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278844

Credo che l'esempio sia molto chiaro e quello che tu vuoi è facile.

"""An example script invoking optionparse, my wrapper around optparse.

  usage: %prog [options] args
  -p, --positional: print positional arguments
  -1, --option1=OPTION1: print option1
  -2, --option2=OPTION2: print option2
"""

import optionparse
opt, args = optionparse.parse(__doc__)

in args come ovvio trovi gli argomenti, opt è una istanza i cui attributi
sono le opzioni possibili: None se non è definita, OPTION1, OPTION2 etc se
impostata.

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


Re: [Python] Dividere stringa in parti uguali

2008-05-22 Per discussione Daniele Varrazzo
Mr.SpOOn ha scritto:

> Ma qual è il vantaggio di usare xrange piuttosto che range?

range è una funzione che costruisce una lista. Se tutto ciò di cui hai bisogno 
è contare da 0 a n, non è necessario avere la lista completamente in memoria. 
Se hai bisogno di contare da 0 a un milione, range() costruisce una lista con 
un milione di elementi, con relativo tempo impiegato per la costruzione e 
occupazione di memoria.

xrange() restituisce un generatore, un piccolo oggetto che non necessita di 
tenere tutta la lista in memoria. Presenta l'interfaccia adatta per essere 
iterato, fornendo su richiesta i numeri: in questo modo può essere messo in un 
"for". In memoria però mantiene solo il proprio stato, ovvero a che numero è 
arrivato. Questo ovviamente è molto più efficiente della creazione della lista 
completa.

I generatori sono una feature molto potente del linguaggio. Tante funzioni 
chiave che sono nate agli albori del linguaggio restituendo liste (range(), i 
metodi di dict keys(), values(), items(), i funzionali map() e filter()...) 
hanno "sviluppato" una controparte in forma di iteratore (xrange, iteritems 
ecc). Visto che inoltre è facile convertire un iteratore in una lista (basta 
usare il costruttore list(): range(10) può essere ottenuto con 
list(xrange(10))) e che poter fare le cose in due modi diversi è contro la 
filosofia Python, i metodi che creano liste in futuro verranno soppiantati da 
quelli generatori (ma visto che è una modifica non backward-compatible, lo si 
farà solo in Python 3.0)

-- 
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python