python - 如何更新数组值并对新值执行相同的操作

标签 python python-3.x

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 = 0a ^ 0 = a 。现在让我们看看会发生什么:

  • 在您的for中循环,您覆盖 i (您将其硬编码为 i=0 )并且您有 j=1对于所有迭代。这意味着您永远不会修改 arr[2]arr[3] ;这就是为什么它们的值保持不变,59 , 分别。 (如果您想运行循环 n 次,也许您需要考虑使用具有另一个变量名称的 for 循环,例如 kwhile 循环)。
  • arr[0]恰好是22**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/

相关文章:

python - 如何使用 str.format 禁止换行

python - 如何使用 POST 请求(请求和 python3)提交联系表单?

python - Pandas 数据框中的前填充和后填充缺失组值

python - PyYAML 用下划线替换键中的破折号

python - 同一索引的多个列

python - ws4py.websocket : Closing connection from client long delay

python-3.x - 动态规划 : How can I break this down in subproblems?

python - Python中的继承有什么意义?

python - 使用 Chromedriver 在另一台电脑上运行 pyinstaller

python 3.6+ 记录器记录 pandas 数据框 - 如何缩进整个数据框?