您需要使用一些括号:
((x for x in range(10) if x%2==i) for i in range(2))
这对我来说没有意义,所以我认为最好先尝试一些简单的方法。因此,我返回列表并尝试:
[>>> [x对于范围(2)中的i,如果x%2 == i,则x对于范围(10)中的x] [1、1、3、3、3、5、5、7、7、9、9]
之所以可行,是因为先前的列表理解将i变量泄漏到了封闭范围,并成为当前变量的i。尝试启动一个新的python解释器,由于NameError失败,这将失败。计数器的泄漏行为已在Python
3中删除。
编辑:
等价的for循环:
(x for x in range(10) if x%2==i for i in range(2))
将会:
l = []for x in range(10): if x%2 == i: for i in range(2): l.append(x)
这也会给出名称错误。
编辑2:
括号中的版本:
((x for x in range(10) if x%2==i) for i in range(2))
等效于:
li = []for i in range(2): lx = [] for x in range(10): if x%2==i: lx.append(x) li.append(lx)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)