Pagina 1 di 1

Stringhe in python

Inviato: mercoledì 27 febbraio 2008, 0:39
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 :)

Re: Stringhe in python

Inviato: mercoledì 27 febbraio 2008, 2:05
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.

Re: Stringhe in python

Inviato: giovedì 28 febbraio 2008, 0:43
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?

Re: Stringhe in python

Inviato: giovedì 28 febbraio 2008, 1:07
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$

Re: Stringhe in python

Inviato: giovedì 28 febbraio 2008, 16:04
da BoboVieri
esatto, però avrei dei problemini con numeri più grandi di 9, no? non legge 10 come 1 e 0?

Re: Stringhe in python

Inviato: giovedì 28 febbraio 2008, 16:36
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$

Re: Stringhe in python

Inviato: venerdì 29 febbraio 2008, 11:33
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?

Re: Stringhe in python

Inviato: venerdì 29 febbraio 2008, 15:26
da crap0101
sai che... non ho capito bene cosa devi fare!
Mi fai un esempio di come dovrebbe essere il risultato che vuoi ottenere?

Re: Stringhe in python

Inviato: venerdì 29 febbraio 2008, 16:24
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.

Re: Stringhe in python

Inviato: venerdì 29 febbraio 2008, 17:17
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

Re: Stringhe in python

Inviato: venerdì 29 febbraio 2008, 17:38
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