2016-08-04 46 views
0

您好我正在尋找一種巧妙的方法來獲取Python中的for循環,其中一個變量(如k)必須從0切換到2並且回到0直到循環結束。像在for循環中將變量從0更改爲2,然後再次更改爲0

k = 0 
for j in range(15): 
    fancycode 
    k = k + 1 

東西在其中每個循環k具有下列值

loop1 k = 0 
loop2 k = 1 
loop3 k = 2 
loop4 k = 0 
loop5 k = 1 
loop6 k = 2 
loop7 k = 0 
... 

我可以使用if語句,但我想知道是否有可能是一些聰明一點不負擔我的代碼

+5

'k = j%3'會起作用嗎? – Vatine

回答

1

做到這一點是使用itertools.cycle()例如正確的做法:

import itertools 

my_cycle = itertools.cycle(range(3)) 
for j in range(15): 
    k = my_cycle.next() 

Python 2.x中有效

爲3.x的,你應該使用

import itertools 

my_cycle = itertools.cycle(range(3)) 
for j in range(15): 
    k = next(my_cycle) 

這將可迭代的工作,無論它的天性。

0

只需使用模數! (%)

for j in range(15): 
    fancycode 
    k = j % 3 
    print(k) 
0

使用列表理解,你可以:

for j, k in ((j, j % 3) for j in range(15)): 
    print('j: {0}, k: {1}'.format(j, k)) 

會打印:

j: 0, k: 0 
j: 1, k: 1 
j: 2, k: 2 
j: 3, k: 0 
j: 4, k: 1 
j: 5, k: 2 
j: 6, k: 0 
j: 7, k: 1 
j: 8, k: 2 
j: 9, k: 0 
j: 10, k: 1 
j: 11, k: 2 
j: 12, k: 0 
j: 13, k: 1 
j: 14, k: 2 
1
from itertools import cycle, islice 

for index, value in enumerate(islice(cycle([0, 2]), 15)): 
    print('loop{} k = {}'.format(index, value))