Как работает i % 2 в list comprehension и почему оно работает?

Вот код:

def alternate(n, first_value, second_value):
    return [[first_value, second_value][i % 2] for i in range(n)]



if __name__ == '__main__':
   print(alternate(5, True, False))

Как и почему в функции alternate работает [i%2]. Когда я убрал [i % 2] то появились квадратные скобки и код распечатал [[True, False], [True, False], [True, False], [True, False], [True, False]]. А когда [i % 2] стоит там то код печатает [True, False, True, False, True]


Ответы (1 шт):

Автор решения: 4500zenja

Выражение [i % 2] в данном случае является индексом списка [first_value, second_value], и при получении некоторого i из списка выбирается соответствующий элемент.

Иными словами, если мы уберём [i % 2], то мы получим генерацию списка, в который будут i раз добавляться списки [first_value, second_value] (здесь — [True, False]). А если мы не будем убирать данный индекс, то, в зависимости от i, из вышеуказанного списка будет выбираться либо True, либо False, и помещаться в новый список.

→ Ссылка