因为最外层的迭代器是在周围的作用域中计算的,所以我们可以使用
zip
一起
itertools.repeat
将依赖关系转移到理解的范围:
import itertools as it
class Foo:
x = 5
y = [j for i, j in zip(range(3), it.repeat(x))]
也可以使用嵌套
for
在理解中循环,并在最外层iterable中包含依赖项:
class Foo:
x = 5
y = [j for j in (x,) for i in range(3)]
对于op的具体示例:
from collections import namedtuple
import itertools as it
class StateDatabase:
State = namedtuple('State', ['name', 'capital'])
db = [State(*args) for State, args in zip(it.repeat(State), [
['Alabama', 'Montgomery'],
['Alaska', 'Juneau'],
# ...
])]