lo_rabb - 2 years ago 108
Python Question

# Take array of indices, find matching indices in another array and replace values

I have two arrays, one array that contains all indices of two arrays that meet a certain condition I had made previous to this. The other array is an array of booleans. I want to take the array of indices and find the same place in the array of booleans and replace those values.

So for example what I am looking to do is:

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

and change myBools to:

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

I've tried:

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

But this does not give me the desired output.

Poorly worded question, but here are two answers, both are extremely simple and straightforward, and don't required complex list comprehension.

If you want to change the bit to the opposite value

``````    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)
``````

If you want to change the bit to zero.

``````    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)
``````

Output

The output is actually the same for both, given the input, but don't let that fool you they do two very different things.

``````[0, 0, 0, 0, 1, 0, 0, 1, 0, 1]
[0, 0, 0, 0, 1, 0, 0, 1, 0, 1]
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download