将for循环中的变量从0更改为2,然后再返回0

时间:2016-08-04 15:07:12

标签: python

您好我正在寻找一种在Python中获得for循环的智能方法,其中一个变量(例如k)必须从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语句,但我想知道是否有一些聪明的东西不会给我的代码带来负担

4 个答案:

答案 0 :(得分: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)

这适用于任何迭代,无论其性质如何。

答案 1 :(得分:1)

from itertools import cycle, islice

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

答案 2 :(得分:0)

只需使用modulo! (%)

struct PersonStruct: Person {}
let foo = PersonStruct()
print(foo.name)
foo.printName()

答案 3 :(得分: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