2015-05-29 12 views
8

Supponiamo che ho tuple nella forma
[(('d',0),('g',0)),(('d',0),('d',1)),(('i',0),('g',0))]
E allora come faccio a incrementare i numeri all'interno della tupla che essi sono della forma: -
[(('d',1),('g',1)),(('d',1),('d',2)),(('i',1),('g',1))]
?
Sono in grado di farlo in un ciclo for for. Ma sto cercando metodi più corti.
P.S. È consentito creare nuove tuplecome incrementare la tupla interna in python?

risposta

7

un elenco di comprensione farà il trucco:

>>> t = [(('d',0),('g',0)),(('d',0),('d',1)),(('i',0),('g',0))] 

>>> print [tuple((a, b+1) for a, b in group) for group in t] 

    [[('d', 1), ('g', 1)], [('d', 1), ('d', 2)], [('i', 1), ('g', 1)]] 
1

Non è possibile modificare i valori in tuple, le tuple sono immutabili. Dovresti renderli liste o creare una nuova tupla con il valore che desideri e memorizzarlo.

+2

Le tuple sono in una lista in base alla domanda. – Navith

+2

@Navith Right, ma le tuple stesse non possono essere modificate, non importa se sono in una lista –

+0

È possibile creare nuove tuple e archiviarle –

1

Questo è il modo meno divinatorio ma il più esplicativo.

Spalato in liste, aggiungere valori all'elenco intero, poi le zip di nuovo insieme:

valued = [] 
lettered = [] 
plusone = [] 
listed = [(('d',0),('g',0)),(('d',0),('d',1)),(('i',0),('g',0))] 
for x,y in listed: 
    for subx, suby in x,y: 
     valued.append(int(suby)) 
     lettered.append(subx) 
for value in valued: 
    value = value + 1 
    plusone.append(int(value)) 
#print plusone 
coolness = zip(lettered,plusone) 
print coolness 
exit() 

I risultati sono: [('d', 1), ('g', 1), ('d', 1), ('d', 2), ('i', 1), ('g', 1)]

+2

"Sono in grado di farlo in un ciclo for for., ma sto cercando metodi più corti." Questo non è più breve ... –

+1

@DavidGreydanus whoops, giuro che non era nella domanda in un primo momento. – jamescampbell

Problemi correlati