获取索引数组,在另一个数组中找到匹配的索引并替换值
Posted
技术标签:
【中文标题】获取索引数组,在另一个数组中找到匹配的索引并替换值【英文标题】:Take array of indices, find matching indices in another array and replace values 【发布时间】:2016-10-22 01:33:48 【问题描述】:我有两个数组,一个数组包含两个数组的所有索引,这些索引满足我在此之前所做的某个条件。另一个数组是布尔数组。我想获取索引数组并在布尔数组中找到相同的位置并替换这些值。
例如,我想做的是:
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
开始,所以不应该是myBools = [0,1,1,0,1,1]
假设我们将每个0
切换到1
,反之亦然?你是怎么得到myBools = [1,0,0,1,0,0]
的?
抱歉,我不清楚,也没有把事情说清楚。我用正确的索引从 0 编辑了问题
又不清楚了,按照你的逻辑输出不应该是[1, 0, 0, 1, 0, 1, 0, 0, 0, 0]
吗?
我想在 myIndxs 给出的索引处将 myBools 的值更改为 0。
【参考方案1】:
我希望这可行(不确定您需要什么):
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]
【讨论】:
【参考方案2】:措辞不好的问题,但这里有两个答案,都非常简单明了,不需要复杂的列表理解。
如果要将位更改为相反的值
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]
【讨论】:
很抱歉给您带来了困惑,我会在以后尝试更清楚。我试图传达后者,而您的解决方案奏效了。感谢您的洞察力和帮助【参考方案3】:尝试使用带有 if-else 语句的列表推导。
[myBools[i] if i in myIdxs else 0 for i in range(len(myBools))]
输出
[1, 0, 0, 1, 0, 0]
【讨论】:
这个答案重申了另一个answer中已经提到的内容。 @BhargavRao 我在发帖时没看到。但感谢您指出。以上是关于获取索引数组,在另一个数组中找到匹配的索引并替换值的主要内容,如果未能解决你的问题,请参考以下文章