首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:编辑for循环中的特定列表索引

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

Stack Overflow用户
提问于 2017-09-24 14:22:59
回答 1查看 65关注 0票数 0

我正在尝试遍历Python中的列表,对其进行一些更改,然后输出结果。下面是函数:

代码语言:javascript
复制
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都是字节列表-比如[b'a', b'c', b'xb0']

我知道在Python语言中编辑正在循环的列表并不常见,但在本例中我需要这样做,因为整个过程需要通过另一个函数可逆,该函数只获取outputref_key作为其输入。如果我追加一个新的列表,这个函数将是不可逆的。

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

EN

回答 1

Stack Overflow用户

发布于 2017-09-24 14:41:35

TLDR:在循环中复制要改变的列表。

复制要处理的列表并不会使函数变得不可逆。一个变异的列表本质上是一个新列表“(在数学意义上)。

在不同的函数中,逆转这个过程仍然是可能的。

最好的做法是对正在处理的列表进行复制。

这段代码似乎是一个试图直接修改其对象的方法。这真的是你想要的吗?如果是这种情况,请查看元类。

假设你想要修改一个对象的属性,你可以创建一个属性self.original_,它表示要加扰的列表,并且只是一个加扰函数。这样,您不需要unsrambe函数,因为您可以根据需要更新属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46387223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档