2016-08-04 5 views
0

Hi Ich bin auf der Suche nach einem intelligenten Weg, um eine for-Schleife in Python, in dem eine Variable, sagen k, muss von 0 auf 2 zu verschieben und dann zurück bis 0 bis zum Ende der Schleife. So etwas wieändere eine Variable in einer for-Schleife von 0 auf 2 und wieder zurück auf 0

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

In dem für jede Schleife k hat die folgenden Werte

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

ich eine if-Anweisung verwenden kann, aber ich möchte, ob es wissen, was sein könnte klug, die nicht belasten tut mein Code

+5

Würde 'k = j% 3' funktionieren? – Vatine

Antwort

1

Der richtige Weg, es zu tun ist itertools.cycle() Zum Beispiel zu verwenden:

import itertools 

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

gültig in Python 2.x

für 3.x sollten Sie

import itertools 

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

verwenden Dies wird mit jedem iterable arbeiten, unabhängig davon Natur.

0

Einfach mit Modulo! (%)

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

mit Liste Verständnis können Sie:

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

druckt:

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))