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 |
顺便说一句,即使它可以工作,您也不想使用
信用: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#) |