Stringhe in python

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
BoboVieri
Prode Principiante
Messaggi: 48
Iscrizione: martedì 26 dicembre 2006, 15:17

Stringhe in python

Messaggio da BoboVieri »

Sto lavorando su un programma, in Python, ed ho un piccolo problema da risolvere: nell'output del programma, ottengo delle stringhe come ad esempio "1,2" e "2,1". Non corrispondono ai numeri 1,2 e 2,1, ma sono stringhe che indicano due eventi di nome 1 e 2: di conseguenza "1,2" e "2,1" per me sono esattamente la stessa cosa, e vorrei riuscire ad eliminare nell'output le stringhe che sono una sorta di permutazione di uno degli output  ma se mi metto a generare tutte le permutazioni, per ogni lavoro con sequenze di una decina di numeri avrei milioni di permutazioni :P Di conseguenza vorrei fare una sorta di index di quei numeri nelle stringhe, per poi confrontarle ed eliminare quelle identiche, senza dimenticare che potrei avere numeri a più cifre in ogni stringa. Avete consigli? grazie in anticipo :)
Avatar utente
Adaron
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 982
Iscrizione: giovedì 12 ottobre 2006, 23:53
Località: Savona

Re: Stringhe in python

Messaggio da Adaron »

approccio teorico:
potresti provare a creare un array degli eventi vuoto. alla generazione dell'evento, controlli che questo non sia già presente nell'array, in caso contrario lo inserisci.
[center]Io sono in te, tu sei in Me. Noi siamo Uno
io sono in te, tu sei in me. Noi siamo Uno.
Tu sei in me, io sono in Te. Noi siamo Uno.
BoboVieri
Prode Principiante
Messaggi: 48
Iscrizione: martedì 26 dicembre 2006, 15:17

Re: Stringhe in python

Messaggio da BoboVieri »

a me viene soltanto in mente di leggere i caratteri nelle stringhe, ed aggiungere il num in array appena becca la virgola ovviamente forzando quello che legge ad int, dopodichè confrontare gli array.. ma mi sembra un tantino lungo come procedimento :p c'è qualche idea migliore? o qualcosa di pre-costruito che lo fa?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Stringhe in python

Messaggio da crap0101 »

non so se ho capito bene, dici una cosa del genere?
parola1 = set(raw_input("prima parola: "))
parola2 = set(raw_input("seconda parola: "))
print "Lettere in comune: " + '-'.join(parola1.intersection(parola2))
il cui risultato è:
marco@marco-desktop:~/Desktop$ python proes2.py
prima parola: laprimaparolaparola
seconda parola: lasecondaparolaparola
Lettere in comune: a-p-r-l-o
marco@marco-desktop:~/Desktop$
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
BoboVieri
Prode Principiante
Messaggi: 48
Iscrizione: martedì 26 dicembre 2006, 15:17

Re: Stringhe in python

Messaggio da BoboVieri »

esatto, però avrei dei problemini con numeri più grandi di 9, no? non legge 10 come 1 e 0?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Stringhe in python

Messaggio da crap0101 »

così?
lista1=['1','2','33','44','12','3','444','56']
lista2=['1','112','33','144','1112','993','4494','56']
parola1 = set(lista1)
parola2 = set(lista2)
print "numeri in comune: " + '-'.join(parola1.intersection(parola2))
il cui risultato è:
marco@marco-desktop:~/Desktop$ python proes2.py
numeri in comune: 33-1-56
marco@marco-desktop:~/Desktop$
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
BoboVieri
Prode Principiante
Messaggi: 48
Iscrizione: martedì 26 dicembre 2006, 15:17

Re: Stringhe in python

Messaggio da BoboVieri »

In sostanza ho un output così:

totale=["1,2","2,1","3,1","3,2","2,3"]

Dove non sono numeri con la virgola, ma sequenze di eventi ossia 1 e 2, 2 e 1, 3 e 1, ecc ecc. e quindi il primo ed il secondo valore per me sono uguali, e dovrei levarne uno. Stavo lavorando sulla lettura di ogni singolo valore, e sono arrivato ad avere un array così:

tot2=[1,2,2,1,3,1,3,2,2,3]

Qui dovrei effettuare un'ulteriore selezione, creando n array numerici per ogni n stringa presente nella prima lista, ordinare ogni valore e confrontarli. L'unica idea che ora mi viene in mente è il dizionario, ma prende stringhe. Che faccio?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Stringhe in python

Messaggio da crap0101 »

sai che... non ho capito bene cosa devi fare!
Mi fai un esempio di come dovrebbe essere il risultato che vuoi ottenere?
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
BoboVieri
Prode Principiante
Messaggi: 48
Iscrizione: martedì 26 dicembre 2006, 15:17

Re: Stringhe in python

Messaggio da BoboVieri »

in sostanza ho un programma che come output da dei numeri in stringhe, con un formato del tipo "1,2,3,4". Può dare diverse stringhe, tutte incluse in una lista. Se in questa lista trovo due sequenze del tipo "1,2,3" e "3,2,1" per me essendo la virgola un "and" corrispondono allo stesso risultato: ossia 1,2 e 3, oppure 3,2 e 1, la stessa cosa, e quindi devo eliminare una delle due stringhe. Ecco perchè mi veniva in mente di leggere ogni stringa ed accumulare i valori che ci sono in una lista, dopodichè fare lista.sort() appena becca la virgola, fare il ciclo degli elementi della lista e aggiungerli tutti ad una stringa, ora ordinata in modo giusto, togliere la vecchia, e confrontare con le restanti..
esempio:
output=["1,2", "2,1"] diventa output=["1,2","1,2"] ed ora se il primo elemento è uguale al secondo, lo toglie dalla lista. Un modo più breve esiste? sempre considerando che potrei avere numeri più grandi di 10.
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Stringhe in python

Messaggio da crap0101 »

BoboVieri ha scritto: Se in questa lista trovo due sequenze del tipo "1,2,3" e "3,2,1" per me essendo la virgola un "and" corrispondono allo stesso risultato: ossia 1,2 e 3, oppure 3,2 e 1, la stessa cosa, e quindi devo eliminare una delle due stringhe. Ecco perchè mi veniva in mente di leggere ogni stringa ed accumulare i valori che ci sono in una lista, dopodichè fare lista.sort() appena becca la virgola,
lista.sort() ordina gli elementi *della* lista, e non funziona con le stringhe, che sono elementi immutabili. Per fare quello dovresti:
import string
lista=["1,2", "2,1","10,12,11,2"]
lista2=[]
for x in lista:
a=string.split(x,",")
lista2.append(a)
print lista2
il cui risultato è:
marco@marco-desktop:~/Desktop$ python 2.py
[['1', '2'], ['2', '1'], ['10', '12', '11', '2']]
EDIT: ho tolto un [ ] alla riga 5
Ultima modifica di crap0101 il venerdì 29 febbraio 2008, 17:33, modificato 1 volta in totale.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Stringhe in python

Messaggio da crap0101 »

eccolo completo, mettendo anche in ordine i numeri

Codice: Seleziona tutto

import string
lista=["1,2", "2,1","10,12,11,2"] 
lista2=[]
for x in lista:
	a=string.split(x,",")
	lista2.append(a)
for x in lista2:
	C=0
	for y in x:
		z=int(y)
		x[C]=z
		C+=1
for x in lista2:x.sort()
print "lista2 ordinata: ",lista2
Ultima modifica di crap0101 il sabato 1 marzo 2008, 0:38, modificato 1 volta in totale.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti