一尘不染

如何合并range()函数

python

对于我正在编写的某些代码,我需要从1到20跳过6进行迭代。

a = range(1,6)
b = range(7,31)

for i in a+b:
    print i

有没有办法更有效地做到这一点?


阅读 331

收藏
2021-01-20

共1个答案

一尘不染

在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

range_with_holes = itertools.chain(xrange(1, 6), xrange(7, 31))

或者只是跳过不需要的索引

for i in range(1, 31):
    if i == 6:
        continue

    ...
2021-01-20