Когда вы хотите сравнить два последовательных значения в диапазоне, вы можете использовать zip
для создания пар и итерации по парам и сравнения:
any(i == j for i, j in zip(meals, meals[1:]))
Здесь я использовал выражение генератора,но вы можете свободно использовать списки, если хотите.
Другой вариант - использовать itertools.tee
для создания двух итераторов, использовать первый элемент из второго итератора, а затем выполнять итерации по парам:
def menu_is_boring(meals):
it_1, it_2 = itertools.tee(meals)
next(it_2)
return any(i == j for i, j in zip(it_1, it_2))
Это будет медленнее, чем первый.
Так, например:
In [1104]: def menu_is_boring(meals):
...: return any(i == j for i, j in zip(meals, meals[1:]))
...:
In [1105]: meals=['Spam', 'Spam']
In [1106]: menu_is_boring(meals)
Out[1106]: True
In [1107]: def menu_is_boring(meals):
...: it_1, it_2 = itertools.tee(meals)
...: next(it_2)
...: return any(i == j for i, j in zip(it_1, it_2))
...:
In [1108]: menu_is_boring(meals)
Out[1108]: True