2016-08-08 9 views
2

Ich habe eine Liste von Elementen, die ich verarbeiten muss. Einfach genug: nur eine einfache for x in list.Python: Der beste Weg, um eine Schleife mit 2 wechselnden Aufgaben zu gestalten

Die Befehle innerhalb der for-Schleife müssen jedoch im Wechsel geringfügig anders sein. So
n = 0 wird in eine Richtung behandelt, dann n = 1 eine andere Art und Weise; dann n = 2 das gleiche wie n = 0. Beachten Sie, dass n und x unterschiedlich sind!

Im Moment kann ich nur mit einem inkrementellen Zähler und if-Anweisungen daran denken. Ich nehme an, es gibt einen einfacheren Weg?

Hope das macht Sinn. Dank

+0

Code in Frage stellen. – Trimax

+0

schauen Sie sich die eingebaute 'enumerate' an – Julien

Antwort

2

Sie nutzen könnten enumerate und modulo abzuwechseln:

li = ['a', 'b', 'c'] 
for idx, ch in enumerate(li): 
    if idx % 2 == 0: 
     # do A 
    else: 
     # do B 
1

Check out Aufzählung:

for n, item in enumerate(my_list): 
    if n % 2 == 0: 
     # do things for even-indexed items 
    else: 
     # do things for odd-indexed items 
1

Sie können mit der Karte handhaben und eine Funktion anzuwenden, muss jede Funktion in der gleichen Position sein als der Wert, mit dem es arbeiten muss. funktionale Ansatz

Beispiel:

>>> import operator 
import functools 
import itertools 
def apply(f, e): 
    return f(e) 
elems = range(10) 
functs = itertools.cycle([functools.partial(operator.add, 1), functools.partial(operator.add, 2)]) 
results = list(itertools.starmap(apply, zip(functs, elems))) 
print results 

[1, 3, 3, 5, 5, 7, 7, 9, 9, 11] 

apply Methode nimmt nur eine Funktion und einen Wert, gibt das Ergebnis dieser Funktion auf diesen Wert angewendet wird. Die Sie starmap gelten für die Liste der Funktionen, die an die Liste der Elemente oder Werte gepackt sind, ist wie das Zippen von 2 Listen, aber eine davon enthält Funktionen, die die anderen Listenwerte verbrauchen.

1

Python Comprehensions kann für Dinge wie diese auf eine sehr einfache Art und Weise, wo in einer anderen Sprache, die Sie Funktionen und Steueranweisungen in Python schreiben nützlich sein, Sie können einfach tun:

new_list = [f2(list_item) for i, list_item in zip(range(len(old_list)), old_list) if i%2==0 else f1(list_item)] 
+0

das ist einfach falsch, versuchen Sie es,' new_list = [f2 (list_item) wenn ich% 2 == 0 else f1 (list_item) für i, list_item in enumerate (oldlist)] ' – Netwave

Verwandte Themen