[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Wie gebe ich den 2. Wert von jedem Tupel in dieser Liste zurück?
Gewünschte Ausgabe:
[2, 3, 5, 4, 7, 7, 8]
Antworten:
Mit einem Listenverständnis .
[x[1] for x in L]
Ignacios Antwort ist was Sie wollen. Als jemand, der auch Python lernt, möchte ich versuchen, es für Sie zu zerlegen ... Wie bereits erwähnt, handelt es sich um ein Listenverständnis (das beispielsweise in DiveIntoPython3 behandelt wird). Hier sind einige Punkte:
[x[1] for x in L]
[]
's um die Codezeile. Diese definieren eine Liste. Dies sagt Ihnen, dass dieser Code eine Liste zurückgibt, also vom list
Typ. Daher wird diese Technik als "Listenverständnis" bezeichnet.L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
vor der Ausführung des obigen Codes definieren.x
ist eine Variable, die gibt es nur im Verständnis - Versuch , den Zugang x
außerhalb des Verstehens oder die Art type(x)
nach der obigen Linie Ausführung und es wird Ihnen sagen NameError: name 'x' is not defined
, während type(L)
Renditen <class 'list'>
.x[1]
zeigt auf das zweite Element in jedem der Tupel, während x[0]
auf jedes der ersten Elemente verweisen würde.Es ist schwer zu sagen, wie oft Sie das Problem versucht haben, bevor Sie die Frage gestellt haben, aber vielleicht waren Sie mit dem Verständnis einfach nicht vertraut? Ich würde einige Zeit damit verbringen, Kapitel 3 von DiveIntoPython oder eine Ressource zum Verständnis durchzulesen . Viel Glück.
x
existiert außerhalb des LC, wobei der letzte Wert daran gebunden ist. Dies ist in 3.x behoben.
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
aber es ist nicht so einfach für die Augen.
Ein Listenverständnis ist der absolute Weg, dies zu tun. Ein anderer Weg, der schneller sein sollte , ist map
und itemgetter
.
import operator
new_list = map(operator.itemgetter(1), old_list)
Als Antwort auf den Kommentar, dass das OP auf Google keine Antwort finden konnte, werde ich einen super naiven Weg aufzeigen, dies zu tun.
new_list = []
for item in old_list:
new_list.append(item[1])
Dies verwendet:
append
Methode in einer Liste.Wenn jemand versucht, eine Sprache zu lernen und diese grundlegenden Teile nicht für sich selbst zusammenstellen kann, muss er sie als Übung betrachten und selbst ausführen, selbst wenn es zwanzig Stunden dauert.
Man muss lernen , über das nachzudenken, was man will, und das mit den verfügbaren Werkzeugen vergleichen . Jedes Element in meiner zweiten Antwort sollte in einem grundlegenden Tutorial behandelt werden. Sie können nicht lernen zu programmieren, ohne eines zu lesen .
ODER Sie können verwenden 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]
>>>
Oder 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]
>>>
Sie können das Entpacken von Sequenzen auch verwenden mit 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)
Dies erzeugt auch ein Tupel _
aus den verworfenen ersten Elementen. Es ist möglich, nur die zweite zu extrahieren, aber ausführlicher:
from itertools import islice
res = next(islice(zip(*L), 1, None))
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))