我有两个数组,一个数组包含两个数组的所有索引,这些数组符合我之前做过的某个条件。另一个数组是一个布尔数组。我想获取索引数组并在布尔数组中找到相同的位置并替换这些值。
例如,我要做的是:
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]
但这并没有给我所需的输出。
答案 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]