[Python] Dividere stringa in parti uguali
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
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
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
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
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
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
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
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