Search code examples
pythonpython-3.xpython-itertools

Cycle through multiple lists with enumerate?


I'm currently assigning each person in a list to a specific week of the month. This is done for the the entire year.

import itertools
import datetime

today = datetime.date.today()
today_str = str(today)
year,month,date = today_str.split('-')
# convert week of the year to a number
current_week = (datetime.date(int(year), int(month), int(date)).isocalendar()[1])

name_list1 = ["Kacey", "Cindy", "John"]

for num, item in enumerate(itertools.cycle(name_list1), 7):
    if num >= current_week:
        print(item)
        break

The above will find the person that falls on the 7th week.... Kacey

1. Kacey
2. Cindy
3. John
4. Kacey
5. Cindy
6. John
7. Kacey

How can I do this with 2 lists of names? So each name in list1 will be assigned a week and each name in list2 will be assigned a week? They are totally independent of each other. I'm wanting to do this in one for loop if possible.

name_list1 = ["Kacey", "Cindy", "John"]
name_list2 = ["Bob", "Julie", "Brian"]

In list2, Bob would be #7.

1. Bob
2. Julie
3. Brian
4. Bob
5. Julie
6. Brian
7. Bob

I could create a for loop for each list, but that will get rather ugly when dealing with multiple lists.


Solution

  • I was able to zip it:

    for num, (item1, item2) in enumerate(itertools.cycle(zip(name_list1, name_list2)), 7):
        if num >= current_week:
            print(item1 + " " + item2)
            break