对于我正在编写的某些代码,我需要从1到20跳过6进行迭代。
a = range(1,6) b = range(7,31) for i in a+b: print i
有没有办法更有效地做到这一点?
在python 2中,您没有合并“范围函数”;这些只是列表。您的示例效果很好。但是range总是在内存中创建一个完整列表,因此,如果仅在for循环中需要,一种更好的方法是使用生成器表达式和xrange:
range_with_holes = (j for j in xrange(1, 31) if j != 6) for i in range_with_holes: ....
在生成器表达式中,if部分可以包含要跳过数字的复杂逻辑。
组合可迭代对象的另一种方法是使用itertools.chain:
itertools.chain
range_with_holes = itertools.chain(xrange(1, 6), xrange(7, 31))
或者只是跳过不需要的索引
for i in range(1, 31): if i == 6: continue ...