2016-06-20 6 views
3

Ich habe zwei Arrays, ein Array, das alle Indizes zweier Arrays enthält, die eine bestimmte Bedingung erfüllen, die ich zuvor gemacht hatte. Das andere Array ist ein Array von booleschen Werten. Ich möchte das Array von Indizes nehmen und die gleiche Stelle im Array von Booleschen Werten finden und diese Werte ersetzen.Array von Indizes nehmen, passende Indizes in einem anderen Array finden und Werte ersetzen

So zum Beispiel, was ich suche zu tun ist:

myIdxs = [0, 3, 5] 
myBools = [1, 0, 0, 1, 1, 1, 0, 1, 0, 1] 

und ändern myBools zu:

myBools = [0, 0, 0, 0, 1, 0, 0, 1, 0, 1] 

Ich habe versucht:

myBools = [myBools[i] for i in myIdx == 0] 

Aber das tut nicht gib mir die gewünschte ausgabe.

+0

Wir indexieren von '0' ausgehend und so sollte es nicht 'myBools = [0,1,1,0,1,1]' sein, vorausgesetzt, wir schalten jede '0' auf eine '1' um und umgekehrt? Wie bekommst du 'myBools = [1,0,0,1,0,0]'? –

+0

Ich entschuldige mich, ich war nicht klar und behielt die Dinge nicht gerade. Ich habe die Frage mit dem richtigen Index von 0 –

+0

bearbeitet. Noch einmal unklar, sollte nicht der Ausgang entsprechend Ihrer Logik "[1, 0, 0, 1, 0, 1, 0, 0, 0, 0]" sein? –

Antwort

1

Poorly Frage formuliert, aber hier sind zwei Antworten, beide sind extrem einfach und unkompliziert, und keine komplexen Liste Verständnis erforderlich.

Wenn Sie das Bit auf den entgegengesetzten Wert

myIdxs = [0, 3, 5] 
    myBools = [1, 0, 0, 1, 1, 1, 0, 1, 0, 1] 

    for i in myIdxs: 
     myBools[i] ^= 1 # Bitwise operator flips the bit 

    print(myBools) 

Wenn Sie das Bit auf Null ändern ändern möchten.

myIdxs = [0, 3, 5] 
    myBools = [1, 0, 0, 1, 1, 1, 0, 1, 0, 1] 

    for i in myIdxs: 
     myBools[i] = 0 # Sets bit to zero 

    print(myBools) 

Ausgabe

Der Ausgang ist eigentlich das gleiche für beide, den Eingang gegeben, aber lassen Sie sich nicht täuschen, dass sie zwei sehr verschiedene Dinge.

[0, 0, 0, 0, 1, 0, 0, 1, 0, 1] 
[0, 0, 0, 0, 1, 0, 0, 1, 0, 1] 
+1

Sorry für die Verwirrung, ich werde versuchen, in Zukunft klarer zu sein. Ich habe versucht, Letzteres zu vermitteln, und Ihre Lösung hat funktioniert. Danke für deine Einsicht und Hilfe –

3

Ich hoffe, das funktioniert (nicht sicher, was Sie brauchen):

myIdxs = [0, 3, 5] 
myBools = [1, 1, 1, 1, 1, 0] 

myBools = [myBools[i] if i in myIdxs else 0 
     for i in xrange(len(myBools))] 

>>> print myBools 
[1, 0, 0, 1, 0, 0] 
0

Versuchen Liste Verständnis mit mit if-else-Anweisung.

[myBools[i] if i in myIdxs else 0 for i in range(len(myBools))] 

Ausgabe

[1, 0, 0, 1, 0, 0] 
+0

Diese Antwort wiederholt, was bereits in einem anderen [Antwort] (http://stackoverflow.com/a/37928682/4099593) erwähnt wurde. –

+0

@BhargavRao Ich sah nicht, während ich meins posten. Aber Danke, dass du es aufgezeigt hast. –