python - Python 中的列表推导式,在迭代之间具有可变状态

标签 python python-2.7 list-comprehension

我有一个非常像 Python 中的列表理解的东西,除了它在迭代之间共享可变状态。有没有什么方法可以通过列表理解来做到这一点?

def f(x):
    """ 5-bit LFSR """
    return (x >> 1) ^ (0x12*(x&1))

def batch(f, x, n):
    result = [x]
    for _ in xrange(1,n):
        x = f(x)
        result.append(x)
    return result

batch(f, 1, 5)

返回 [1, 18, 9, 22, 11]。这里重要的是 batch 函数,而不是 f(x) 这只是一个简单的例子来说明问题。

或者我可以使用生成器实现:

def batch(f, x, n):
    yield x
    for _ in xrange(1,n):
        x = f(x)
        yield x

list(batch(f, 1, 5))

但闻起来有点别扭。我正在寻找的是这样的东西......

batch = [??? for _ in xrange(n)]

最佳答案

Is there any way to do it with a list comprehension?

What I'm looking for is something like this...

batch = [??? for _ in xrange(n)]

当然,没问题:

>>> x = 1
>>> n = 5
>>> [prev.append(f(prev[0])) or prev.pop(0) for prev in [[x]] for _ in xrange(n)]
[1, 18, 9, 22, 11]

注意:这是个坏主意。 (我几乎只是这样做,因为 user2357112 说没有办法)

关于python - Python 中的列表推导式,在迭代之间具有可变状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803002/

相关文章:

python - 在Python中,如何设计复杂的列表理解的样式

python - 将循环更改为 Python 列表理解

python - NLTK 删除无效单词

python - 将 "\n"添加到文本中的特定行

python - 如何使用python访问父目录中的文件?

python - 编写非数据描述符

python - 转义列表理解中的 "\n"新行与 Python 中的 for 循环

python - 如何创建一个新页面以与 Python 融合

python - OpenCV对象检测一个困难的对象

Python 没有从 subprocess.check_call 获取原始二进制文件