2013-09-26 6 views
5

Ich habe 2 Listen von Zahlen, eine xVar genannt und die andere yVar genannt. Ich werde diese 2 Elemente verwenden, um X- und Y-Werte in einem Graphen darzustellen. Sie haben beide die gleiche Anzahl von Elementen.Python: Wie Werte aus 2 Listen basierend auf dem, was in 1 Liste ist zu entfernen

Normalerweise würde ich plotten nur

ax.scatter(xVar,yVar,s=2,color='tomato'); 

Ich möchte Daten von yVar zu entfernen, die über einem bestimmten Wert sind zum Beispiel alle Daten, die einen yVar Wert über 100 haben, aber ich möchte auch die entfernen verbundener xVar Wert. Kann jemand vorschlagen, 2 neue Variablen zu erstellen, die alle Werte in yVar über 100 und die xVar Werte entfernen, die mit ihnen verbunden sind? Dann kann ich einfach xVar & yVar in meiner Zeichenzeile zu den neuen Variablen ersetzen.

Thanks again Alle,

Antwort

11

Wenn Sie etwas zu den entsprechenden Werten von zwei (oder mehr tun wollen) Listen, das ist zip ist für. Es gibt Ihnen eine Liste der entsprechenden Werte für jeden Index.

Also, in diesem Fall zip die beiden Listen zusammen, dann die komprimierte Liste gefiltert, entpacken Sie sie dann (mit zip wieder, wie die Dokumentation erklärt):

xVar, yVar = zip(*((x, y) for x, y in zip(xVar, yVar) if y <= 100)) 

Wenn dies verwirrend ist, lassen Sie mich zeigen sie Schritt für Schritt:

>>> xVar = [1, 200, 300, 10] 
>>> yVar = [150, 100, 50, 200] 
>>> xyVar = zip(xVar, yVar) 
>>> xyVar 
[(1, 150), (200, 100), (300, 50), (10, 500)] 
>>> xyFiltered = [(x, y) for x, y in xyVar if y <= 100] 
>>> xyFiltered 
[(200, 100), (300, 50)] 
>>> xVar, yVar = zip(*xyFiltered) 
[(200, 300), (100, 50)] 
+0

+1 Ich wollte gerade dies schreiben. – arshajii

+0

Perfekt, vielen Dank. – bigCow

1

Ohne den Code zu schreiben, finden Sie den Index für den y Sie entfernen möchten, um den Index zu speichern, den y-Wert entfernen, dann mit der gleichen Indexnummer des x-Wert entfernen.

+1

Aber es Tricks/gremlins sein, wenn mehrere Elemente zu entfernen (zB bei der Entfernung während der Iteration der Liste ist) diese Weise .. – user2246674

+0

@ user2246674: Nur ein Trick, wirklich: Du musst Sortiere die Indizes vorher um sie entfernen. Aber ja, es ist wirklich leicht zu vergessen, das zu tun, oder es falsch zu verstehen. – abarnert

0

Suche Indizes, die auf Daten entsprechen wollen Sie beibehalten:

ind = [i for i in range(len(yVar)) if yVar[i] < 100] 

Und nur diese Punkte verwenden:

yVar = [yVar[i] for i in ind] 
xVar = [xVar[i] for i in ind] 
+2

möchten Sie vielleicht [enumerate] (http://docs.python.org/2/library/functions.html#enumerate) – iruvar

+0

@ 1_CR Danke, ja, das ist eine gute Option. – sashkello

Verwandte Themen