Pythonic способ сделать это состоит в том, чтобы использовать zip
с пониманием списка, который вообще не использует индексы, чтобы получить re_code
, затем enumerate
, чтобы снова получить индексы для index
.
mylist=[21,35,38,41,10,9]
re_code = [int(a < b) for a, b in zip(mylist, mylist[1:])]
index = [i for i, v in enumerate(re_code) if v == 0]
print(re_code)
print(index)
Распечатка с этого
[1, 1, 1, 0, 0]
[3, 4]
Если вам просто нужно значение index
и вам не нужно re_code
, это можно сделать только в одном понимании списка. Спросите, хотите ли вы, чтобы я показал это.
zip
объединяет последовательные элементы в списке. Если список очень длинный или если он может быть итеративным, а не списком, вам следует использовать pairwise
рецепт из документации itertools вместо zip
.
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)