Python:编辑for循环中的特定列表索引

问题描述:

我想通过Python中的列表循环,对其进行一些更改,然后输出结果。这里的功能:Python:编辑for循环中的特定列表索引

def scramble_bytes(self, ref_key): 
    """ 
    Uses ref_key as a reference to scramble self. 
    They must be equal-length lists of bytes 
    """ 
    if len(self) != len(ref_key): 
     return "Inputs to scramble_bytes must be equal length!" 
    scrambles_needed = range(len(self)) 
    scramble_length = len(self) 
    output = self 
    for i in scrambles_needed: 
     scramble_selector = int.from_bytes(ref_key[i], byteorder='big') 
     scrambler_byte = int.from_bytes(output[(scramble_selector + i) % scramble_length], byteorder='big') 
     scrambled_byte = int.from_bytes(output[i], byteorder='big') 
     result_scramble = scrambler_byte^scrambled_byte 
     output[i] = result_scramble.to_bytes(1, byteorder="big") 
    return output 

为了澄清,selfref_key是两个列表bytes-如[b'a', b'c', b'xb0']

我知道,这不是通常的做法是编辑一个正在通过在Python循环列表,但在这种情况下,我需要这样做,因为整个过程需要通过另一个函数进行反转,该函数仅将outputref_key作为其输入。如果我追加到新列表中,该功能将不可逆。

我怀疑这个问题与python命名空间有关 - output[i]会在for循环中创建一个新的局部变量。如果这确实是问题,我该如何解决它?

TLDR:使列表的副本在循环中进行变异。

制作要处理的列表的副本不会使功能变得可以使用。突变的列表本质上是一个``新名单”(在数学意义上的)。

倒车过程中应该还是有可能在不同的功能。

这是最适合你,使列表的副本正在处理中。

此代码似乎是试图直接修改其对象的方法。这是你真正想要的吗?如果是这样的话看的到元类。

假设你要修改的属性一个对象,你可以使一个属性self.original_表示要被加密的列表,以及只是争夺函数。这样你就不需要unsrambe函数,因为你可以根据需要更新属性。