我想通過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
爲了澄清,self
和ref_key
是兩個列表bytes-如[b'a', b'c', b'xb0']
我知道,這不是通常的做法是編輯一個正在通過在Python循環列表,但在這種情況下,我需要這樣做,因爲整個過程需要通過另一個函數進行反轉,該函數僅將output
和ref_key
作爲其輸入。如果我追加到新列表中,該功能將不可逆。
我懷疑這個問題與python命名空間有關 - output[i]
會在for
循環中創建一個新的局部變量。如果這確實是問題,我該如何解決它?