import math
t=int(input())
for i in range(0,t):
n,x=map(int,input().split())
arr=list(map(int,input().split()))[:n]
if x>=n:
for i in range(0,n):
i=0
j=1
p=1
p=int(p)
print(p)
arr[i]=arr[i]^(2**p)
arr[j]=arr[j]^(2**p)
i+=1
j+=1
print(arr)
我的数组值没有更新。例如,如果 n=4 x=4 且 arr= [2,5,5,9],第一次操作后数组变为 [0, 7, 5, 9],然后我想要对我的新数组 [0,7,5,9] 执行此操作,但它仍然在我以前的数组 [2,5,5,9] 上执行。我是 python 新手,请帮助我。在此先致谢。
最佳答案
您的代码为 n=4
, x=4
,和arr=[2,5,5,9]
执行for
循环 4 次并产生以下输出(不包括打印 p
):
[0, 7, 5, 9]
[2, 5, 5, 9]
[0, 7, 5, 9]
[2, 5, 5, 9]
它产生上述输出的原因与您执行的 XOR ( ^
) 操作有关。回想一下a ^ a = 0
和a ^ 0 = a
。现在让我们看看会发生什么:
- 在您的
for
中循环,您覆盖i
(您将其硬编码为i=0
)并且您有j=1
对于所有迭代。这意味着您永远不会修改arr[2]
和arr[3]
;这就是为什么它们的值保持不变,5
和9
, 分别。 (如果您想运行循环n
次,也许您需要考虑使用具有另一个变量名称的for
循环,例如k
或while
循环)。 -
arr[0]
恰好是2
和2**p
也是2
,因为p=1
对于所有迭代。所以,0
是 XOR 运算的结果2
与自身偶数次,并且2
是 XOR 运算的结果2
与自身发生奇数次。例如,在第一次迭代中,您实际上执行2 ^ 2
并得到0
,在第二个2 ^ 2 ^ 2 = 2 ^ 0
并得到2
,等等等等。 -
arr[1]
不是2
,但或多或少与上述逻辑相同。在第一次迭代中,您有5 ^ 2
(回想p=1
所以2**p=2
),即7
,在第二次迭代中,您将返回原始号码5
因为5 ^ 2 ^ 2 = 5 ^ 0
,等等等等。
关于python - 如何更新数组值并对新值执行相同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65216219/