关于循环:跳过python中range函数中的值

Skip over a value in the range function in python

遍历一系列数字并跳过一个值的有效方法是什么? 例如,范围是从0到100,而我想跳过50。

编辑:
这是我正在使用的代码

1
2
3
4
for i in range(0, len(list)):
    x= listRow(list, i)
    for j in range (#0 to len(list) not including x#)
        ...


您可以使用以下任何一种:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Create a range that does not contain 50
for i in [x for x in xrange(100) if x != 50]:
    print i

# Create 2 ranges [0,49] and [51, 100] (Python 2)
for i in range(50) + range(51, 100):
    print i

# Create a iterator and skip 50
xr = iter(xrange(100))
for i in xr:
    print i
    if i == 49:
        next(xr)

# Simply continue in the loop if the number is 50
for i in range(100):
    if i == 50:
        continue
    print i


除了Python 2方法外,这里还有Python 3的等效方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Create a range that does not contain 50
for i in [x for x in range(100) if x != 50]:
    print(i)

# Create 2 ranges [0,49] and [51, 100]
from itertools import chain
concatenated = chain(range(50), range(51, 100))
for i in concatenated:
    print(i)

# Create a iterator and skip 50
xr = iter(range(100))
for i in xr:
    print(i)
    if i == 49:
        next(xr)

# Simply continue in the loop if the number is 50
for i in range(100):
    if i == 50:
        continue
    print(i)

范围是Python 2中的列表和Python 3中的迭代器。


1
2
3
4
5
for i in range(0, 101):
if i != 50:
    do sth
else:
    pass

比较每个数字很浪费时间,不必要地导致线性复杂性。 话虽如此,这种方法避免了任何不平等检查:

1
2
3
4
5
import itertools

m, n = 5, 10
for i in itertools.chain(range(m), range(m + 1, n)):
    print(i)  # skips m = 5

顺便说一句,即使它可以工作,您也不想使用(*range(m), *range(m + 1, n)),因为它会将可迭代对象扩展为元组,并且内存效率低下。

信用:njzk2发表评论,洛克回答


这取决于您想做什么。 例如,您可以在理解中坚持以下条件:

1
2
3
4
5
# get the squares of each number from 1 to 9, excluding 2
myList = [i**2 for i in range(10) if i != 2]
print(myList)

# --> [0, 1, 9, 16, 25, 36, 49, 64, 81]

1
2
3
4
for i in range(100):
    if i == 50:
        continue
    dosomething


您可以做的是,将一个if语句放在要与50保持距离的循环内的所有内容周围。
例如

1
2
3
4
for i in range(0, len(list)):
    if i != 50:
        x= listRow(list, i)
        for j in range (#0 to len(list) not including x#)