[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Come restituisco il secondo valore da ogni tupla all'interno di questo elenco?
Uscita desiderata:
[2, 3, 5, 4, 7, 7, 8]
Risposte:
Con una lista di comprensione .
[x[1] for x in L]
La risposta di Ignacio è quello che vuoi. Tuttavia, poiché qualcuno sta imparando anche Python, lascia che provi a sezionarlo per te ... Come accennato, è una comprensione di liste (trattata in DiveIntoPython3 , per esempio). Ecco alcuni punti:
[x[1] for x in L]
[]s attorno alla riga di codice. Questi sono ciò che definisce un elenco. Questo ti dice che questo codice restituisce un elenco, quindi è del listtipo. Quindi, questa tecnica è chiamata "comprensione delle liste".L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]prima di eseguire il codice sopra.xè una variabile che esiste solo nella comprensione - prova ad accedere xal di fuori della comprensione, o digita type(x)dopo aver eseguito la riga sopra e te lo dirà NameError: name 'x' is not defined, mentre type(L)ritorna <class 'list'>.x[1]punta al secondo elemento in ciascuna delle tuple mentre punterebbe x[0]a ciascuno dei primi elementi.È difficile dire quanto hai tentato di risolvere il problema prima di porre la domanda, ma forse non avevi familiarità con la comprensione? Passerei un po 'di tempo a leggere il Capitolo 3 di DiveIntoPython o qualsiasi risorsa sulla comprensione. In bocca al lupo.
xesisterà al di fuori di LC, con l'ultimo valore associato ad esso. Questo problema è stato risolto in 3.x.
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]ma non è così facile per gli occhi.
Una comprensione della lista è assolutamente il modo per farlo. Un altro modo che dovrebbe essere più veloce è mape itemgetter.
import operator
new_list = map(operator.itemgetter(1), old_list)
In risposta al commento che l'OP non è riuscito a trovare una risposta su Google, ti indicherò un modo super ingenuo per farlo.
new_list = []
for item in old_list:
new_list.append(item[1])
Questo utilizza:
appendmetodo su un elenco.Se qualcuno sta cercando di imparare una lingua e non riesce a mettere insieme questi pezzi di base da solo, deve vederlo come un esercizio e farlo da solo anche se ci vogliono venti ore.
Bisogna imparare a pensare a ciò che si vuole e confrontarlo con gli strumenti disponibili . Ogni elemento della mia seconda risposta dovrebbe essere trattato in un tutorial di base. Non puoi imparare a programmare senza leggerne uno .
Puoi anche usare lo spacchettamento in sequenza con zip:
L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
_, res = zip(*L)
print(res)
# (2, 3, 5, 4, 7, 7, 8)
Questo crea anche una tupla _dai primi elementi scartati. È possibile estrarre solo il secondo, ma più prolisso:
from itertools import islice
res = next(islice(zip(*L), 1, None))
O puoi usare pandas:
>>> import pandas as pd
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> df=pd.DataFrame(L)
>>> df[1]
0 2
1 3
2 5
3 4
4 7
5 7
6 8
Name: 1, dtype: int64
>>> df[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
Oppure numpy:
>>> import numpy as np
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> arr=np.array(L)
>>> arr.T[1]
array([2, 3, 5, 4, 7, 7, 8])
>>> arr.T[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>>
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))