Найти все экземпляры 6
и получить каждый 3
rd .
l = [5, 2, 2, 1, 4, 5, 4, 6, 6, 5, 5, 3, 3, 2, 1, 3, 5, 3, 5, 2, 4, 4, 2, 3, 3, 2, 6, 2, 3, 6, 3, 6, 1, 6]
res = [i for i, x in enumerate(l) if x == 6][2::3]
print(res)
, который печатает
[26, 33]
Пояснение @ BrettBeatty :
Итерирование по enumerate
дает как index
, так и value
.Понимание списка затем использует value
, чтобы проверить, является ли оно 6
, и если да, возвращает index
.Затем эти собранные индексы нарезаются, начиная с третьего элемента (index
2) с шагом 3.
Как правило, все это можно аккуратно упаковать в функцию, которая возвращаетсписок с индексом каждого k
th экземпляра n
:
def get_index_of_kth_n(lst, n, k=1):
return [i for i, x in enumerate(lst) if x == n][k-1::k]
, который также обрабатывает угловых случаев , таких как:
lst
передано пусто n
не появляется в lst
n
появляется меньше k
раз в lst
Во всех вышеперечисленных случаях возвращается пустой список ([]
).Отрицательные значения k
не поддерживаются.