Как работает 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 шт):
Выражение [i % 2] в данном случае является индексом списка [first_value, second_value], и при получении некоторого i из списка выбирается соответствующий элемент.
Иными словами, если мы уберём [i % 2], то мы получим генерацию списка, в который будут i раз добавляться списки [first_value, second_value] (здесь — [True, False]). А если мы не будем убирать данный индекс, то, в зависимости от i, из вышеуказанного списка будет выбираться либо True, либо False, и помещаться в новый список.