lo_rabb lo_rabb - 5 months ago 8
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.

Answer

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]