我正在寻找以下问题的简单解决方案。
我们在python中有这种用法的 for -loop吗?
[2,3,4,5,6,7,8,9,0,1]
我有一个使用的实现,而 -loop:
i = 2
while True:
i = i%9
if i == 1:
break
# payload code here
i+=1
答案 0 :(得分:7)
for i in (2, 3, 4, 5, 6, 7, 8, 9, 0, 1):
...
for i in range(2, 10) + range(2):
...
for i in itertools.chain(xrange(2, 10), xrange(2)):
...
for i in (x % 10 for x in xrange(2, 12)):
答案 1 :(得分:6)
您可以使用range
:
>>> for i in range(2,10) + range(0,2):
... print i
...
2
3
4
5
6
7
8
9
0
1
或者使用itertools.chain
(在py2和py3中都有效):
>>> from itertools import chain
>>> for i in chain(range(2,10),range(0,2)):
print (i)
...
2
3
4
5
6
7
8
9
0
1
答案 2 :(得分:0)
尝试使用
for i in range(2,10)+[0,1]:
print i
答案 3 :(得分:0)
使用内置range
function和modulo operator:
>>> for i in range(10):
... print((i + 2) % 10)
...
2
3
4
5
6
7
8
9
0
1
在Python3中,您可以使用list comprehension和print
function`将其简化为一行:
>>> [print((x + 2) % 10) for x in range(10)] and None
2
3
4
5
6
7
8
9
0
1
在Python2中,前缀为:
>>> from __future__ import print_function
或者如果您只想要列表:
>>> [(x + 2) % 10 for x in range(10)]
[2, 3, 4, 5, 6, 7, 8, 9, 0, 1]
答案 4 :(得分:0)
由于print
语句/函数的开销,我将print
的每次更改都更改为pass
,但这里是不同方法的timeit
结果,运行每个10000000次:
>>> timeit.timeit(stmt='for i in chain(xrange(2,10),xrange(0,2)): pass', setup='from itertools import chain', number=10000000)
11.17552900314331 # Ignacio
>>> timeit.timeit(stmt='for i in chain(range(2,10),range(0,2)): pass', setup='from itertools import chain', number=10000000)
13.646738052368164 # Ashwini
>>> timeit.timeit(stmt='for i in range(10): (i+2) % 10', number = 10000000)
13.806042909622192 # Bengt
>>> timeit.timeit(stmt='for i in (x % 10 for x in xrange(2, 12)): pass', number=10000000)
18.127070903778076 # Ignacio
>>> timeit.timeit(stmt='[(x+2)%10 for x in range(10)] and None', number=10000000)
21.191375017166138 # Bengt
>>> timeit.timeit(stmt='for i in range(2,10) + [0,1]: pass', number=10000000)
10.056025981903076 # Hardik
>>> timeit.timeit(stmt='for i in range(2,10) + range(2): pass', number=10000000)
11.409713983535767 # Ignacio
>>> timeit.timeit(stmt='for i in (2,3,4,5,6,7,8,9,0,1): pass', number=10000000)
2.8564839363098145 # Ignacio
压低最有效的方法是如何迭代的数字的文字表达式,但是,它涉及最少的分配和最少的算术。