Python列表理解 - 访问最后创建的元素?

Mat*_*att 16 python

是否可以访问列表推导中生成的前一个元素.

我正在研究一些玩具加密的东西.将密钥作为任意大整数,初始化值和元素列表作为要加密的消息.我需要使用先前的加密元素和密钥对每个元素进行xor.以下循环可以.

previous = initialization_value
cipher = []
for element in message:
    previous = element ^ previous ^ key
    cipher.append(previous)
Run Code Online (Sandbox Code Playgroud)

我觉得应该可以将其转换为列表理解,但我不确定如何处理初始值或访问生成的先前值.是否有可能,如果是这样,理解力是什么?

Eli*_*ght 16

用列表理解来做这个没有好的Pythonic方法.考虑列表推导的最佳方式是替换mapfilter.换句话说,无论何时需要列表,都可以使用列表推导

  • 使用其元素作为某些表达式的输入(例如,对元素进行平方)

  • 根据某些条件删除它的一些元素

这些东西的共同之处在于它们每次只能查看一个列表元素.这是一个很好的经验法则; 即使你理论上可以将你展示的代码写成列表理解,它也会很笨拙和不熟悉.

  • +1:这就是为什么我们仍然有for语句 - 对于完全像这个问题的情况. (5认同)

Joh*_*uhy 6

大概可以做到;请参阅列表推导式的秘密名称。不过,它不是pythonic。


小智 5

作为生成器:

def cypher(message, key, seed):
    for element in message:
        seed = element ^ seed ^ key
        yield seed

list(cypher(message, key, initial_seed))
Run Code Online (Sandbox Code Playgroud)