我有一个非常像 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/