У меня есть 2 списка разной длины. Подарок выбирается и присваивается имени, затем следующий подарок присваивается следующему имени и так далее по кругу, пока подарки не будут закончены.

gifts = ['pencil', 'pen', 'book', 'notebook', 'pencil_box', 'schoolbag', 'stick']
name = ['John', 'Marcus', 'Marie']

Ожидаемый выход:

John: pencil notebook stick
Marcus: pen pencil_box 
Marie: book schoolbag

Другой пример:

gifts  = ['car', 'house', 'phone']
name = ['RichieRich']

Ожидаемый выход:

RichieRich: car house phone

Немного помощи?

1
dun.py 30 Май 2019 в 20:48

2 ответа

Лучший ответ

Ну вот:

from itertools import cycle
from collections import defaultdict

gifts = ['pencil', 'pen', 'book', 'notebook', 'pencil_box', 'schoolbag', 'stick']
names = ['John', 'Marcus', 'Marie']

gifts_by_name = defaultdict(list)
for name, gift in zip(cycle(names), gifts):
    gifts_by_name[name].append(gift)

for name in names:
    print '%s: %s' % (name, " ".join(gifts_by_name[name]))
1
swenzel 30 Май 2019 в 18:25

Это возможно с помощью цикла for:

count = 0 
kids = [yourkids]
gifts = [yourgifts]
outputKids = kids
for gift in gifts:
    if count > kids.length:
        count = 0;
    outputKids[count].push(gift)
    count = count + 1

Затем просто сопоставьте ваш массив "kids" с вашими "outputKids" (по индексу), и вы получите подарки для каждого ребенка.

0
FeaturedSpace 30 Май 2019 в 18:21