获取索引数组,在另一个数组中查找匹配的索引并替换值

时间:2016-06-20 17:35:44

标签: python list boolean

我有两个数组,一个数组包含两个数组的所有索引,这些数组符合我之前做过的某个条件。另一个数组是一个布尔数组。我想获取索引数组并在布尔数组中找到相同的位置并替换这些值。

例如,我要做的是:

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

并将myBools更改为:

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

我试过了:

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

但这并没有给我所需的输出。

3 个答案:

答案 0 :(得分:3)

我希望这有效(不确定你需要什么):

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]

答案 1 :(得分:1)

措辞不好的问题,但这里有两个答案,都非常简单明了,并且不需要复杂的列表理解。

如果您想将该位更改为相反的值

    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)

如果您想将该位更改为零。

    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)

<强>输出

在给定输入的情况下,两者的输出实际上是相同的,但是不要让你愚弄他们做两件非常不同的事情。

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

答案 2 :(得分:0)

尝试将list comprehension与if-else语句一起使用。

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

<强>输出

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