Identifica si la lista tiene elementos consecutivos que son iguales en Python

Estoy tratando de identificar si una lista grande tiene elementos consecutivos que son iguales.

Entonces digamos

lst = [1, 2, 3, 4, 5, 5, 6] 

Y en este caso, devolvería true, ya que hay dos elementos consecutivos lst[4] y lst[5] , tienen el mismo valor.

Sé que esto probablemente podría hacerse con algún tipo de combinación de bucles, pero me preguntaba si habría una forma más eficiente de hacerlo.

Puede usar itertools.groupby() y una expresión generadora dentro de any() :

 >>> from itertools import groupby >>> any(sum(1 for _ in g) > 1 for _, g in groupby(lst)) True 

O como una forma más Pythonic puede usar zip() , para verificar si al menos hay dos elementos consecutivos iguales en su lista:

 >>> any(i==j for i,j in zip(lst, lst[1:])) # in python-2.x for refusing of creating a list of all pairs use itertools.izip() instead. True 

Nota: El primer enfoque es bueno cuando desea comprobar si hay más de 2 elementos iguales consecutivos, de lo contrario, en este caso, ¡el segundo tomará el pastel!

Puede utilizar una simple any condición:

 lst = [1, 2, 3, 4, 5, 5, 6] any(lst[i]==lst[i+1] for i in range(len(lst)-1)) #outputs: True 

any retorno True si alguno de los elementos iterables es True

Si está buscando una forma eficiente de hacer esto y las listas son numéricas, probablemente querrá usar numpy y aplicar la función diff (diferencia):

 >>> numpy.diff([1,2,3,4,5,5,6]) array([1, 1, 1, 1, 0, 1]) 

Luego, para obtener un solo resultado sobre si hay elementos consecutivos:

 >>> numpy.any(~numpy.diff([1,2,3,4,5,5,6]).astype(bool)) 

Primero realiza la diff , invierte la respuesta y luego verifica si any de los elementos resultantes es distinto de cero.

Un simple for loop debería hacerlo:

 def check(lst): last = lst[0] for num in lst[1:]: if num == last: return True last = num return False lst = [1, 2, 3, 4, 5, 5, 6] print (check(lst)) #Prints True 

Aquí, en cada bucle, verifico si el elemento actual es igual al elemento anterior.

Mi solución para esto es si quiere averiguar si 3 valores consecutivos son iguales a 7. Por ejemplo, una tupla de intList = (7, 7, 7, 8, 9, 1):

 for i in range(len(intList) - 1): if intList[i] == 7 and intList[i + 2] == 7 and intList[i + 1] == 7: return True return False