Скажем, я хочу создать генератор, который возвращает фиксированное количество пользователей из списка, и если количество пользователей, которых я хочу, больше, чем длина списка, он просто повторяет последнего пользователя. Я написал генератор, чтобы сделать это ниже:Есть ли лучший способ определить этот генератор?
def gen_users(users, total):
num_users = len(users)
cur_user = 0
while cur_user < total:
if cur_user >= num_users:
yield users[-1]
else:
yield users[cur_user]
cur_user += 1
Так что, если у меня был список пользователей users = ['one', 'two', 'three']
и я называю gen_users(users, 5)
я вернусь one, two, three, three, three
.
Есть ли более питонический способ сделать это? Использует ли генераторы действительный подход к этой проблеме?
Именно то, что я хотел, я знал, что там должно было быть лучший способ сделать это! Благодарю. –
Если 'total' велико, использование' xrange' может быть улучшением. – Bach
@HansZauber, я использовал 'range', чтобы убедиться, что этот код работает как в Python 2.x, 3.x. – falsetru