Как найти первый индекс последовательно повторяющихся чисел в списке? - PullRequest
0 голосов
/ 02 мая 2019

Какой самый эффективный способ найти индекс последовательно повторяющихся чисел?Индекс должен быть индексом первого числа в последовательно повторяющихся рядах.

Моя первая мысль - это библиотека itertools, но как я могу найти индекс числа?Я попытался перечислить и найти одно решение для этого вопроса:

def foo(ls):

    result = [None, 0, -1] # record number, number of occurrence, and index
    track = [None, 0, -1] # keep track for the current number
    for index, value in enumerate(ls):
        if value == track[0]:
            track[1] += 1
        else:
            track[0] = value
            track[2] = index

        if track[1] > result[1]:
            result[0] = track[0]
            result[1] = track[1]
            result[2] = track[2]

     return result[2]

Например, если вход представляет собой список [1,2,3,3,3,9,9,9], теперь 3и 9, оба повторяются последовательно три раза, на выходе должен быть индекс большего (9), то есть 5. И если входом является список [1,9,9,3,2,9,9,9] на выходе должен быть индекс 5.

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Не уверен, что это эффективно. Использование itertools.groupby

Ex:

from itertools import groupby

l1 = [1,9,9,3,2,9,9,9, 1,2]
#Group by elements --> /6339543/kakoi-samyi-pythonic-sposob-identifitsirovat-posledovatelnye-dublikaty-v-spiske
grouped_L = [(k, list(g)) for k,g in groupby(enumerate(l1), lambda x: x[1])]   

print( max(grouped_L, key=lambda x: (x[0], len(x[1]))) )
print( max(grouped_L, key=lambda x: (x[0], len(x[1])))[1][0][0] )  #Get Index

Выход:

(9, [(5, 9), (6, 9), (7, 9)])
5
0 голосов
/ 02 мая 2019

используйте метод .index() в списке и передайте значение, которое вы хотите в качестве параметра, и оно вернет индекс первого вхождения:

data = [1,3,5,6,5,9,3,8,5]
ind = data.index(5)
print(ind)

код выше вернет 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...