2016-10-04 2 views
0

Ich habe 2 Listen,Wie können Sie auf Objekte aus zwei Listen in zirkulärer Reihenfolge zugreifen?

list_a = ['color-1', 'color-2', 'color-3', 'color-4'] 
list_b = ['car1', 'car2', 'car3', 'car4' ........... 'car1000'] 

Ich brauche die Elemente in einer kreisförmigen, um von list_a zuzugreifen:

['color-1']['car1'] 
['color-2']['car2'] 
['color-3']['car3'] 
['color-4']['car4'] 
['color-1']['car5'] #list_a is starting from color-1 once it reaches end 
['color-2']['car6'] #... goes on until end of items in list_b 

ich das versucht, es funktioniert nicht. Bitte beraten.

start=0 
i=0 
for car_idx in xrange(start, end): 
    if i <= len(color_names): 
     try: 
      self.design(color_names[i], self.cars[car_idx]) 
      i+=1 
     except SomeException as exe: 
      print 'caught an error' 

Antwort

2

der Modulo-Operator % indizieren in den richtigen Bereich Verwendung:

len_a = len(list_a) 
len_b = len(list_b) 
end = max(len_a, len_b) 
for i in range(end): 
    print(list_a[i % len_a], list_b[i % len_b]) 
    # ... do something else 
+0

dieses schön ist, weil, wie es ist Agnostiker darüber, welche Liste der kürzeste ist. –

6

Verwenden itertools.cycle ein zyklisches iterable aus list_a zu machen. Verwenden Sie zip, um Elemente aus dem zyklischen iterablen mit Elementen aus list_b zu paaren. Der von zip zurückgegebene iterierbare Wert wird beendet, wenn der kürzeste der an zip (d. H. list_b) übergebenen Iterablen endet.

import itertools as IT 
list_a = ['color-1', 'color-2', 'color-3', 'color-4'] 
list_b = ['car1', 'car2', 'car3', 'car4', 'car5', 'car6', 'car1000'] 

for a, b in zip(IT.cycle(list_a), list_b): 
    print(a, b) 

druckt

color-1 car1 
color-2 car2 
color-3 car3 
color-4 car4 
color-1 car5 
color-2 car6 
color-3 car1000 
+0

Du schlägst mich dazu! –

Verwandte Themen