Для логического предиката в списке, подобном этому, вам нужно решение, которое возвращает False
, как только обнаружен конфликт - решения, которые преобразуют список весь просто для поиска первого и второго.элемент не соответствует, не хорошие алгоритмы.Вот один из подходов:
def all_same_first(a):
return not a or all(map(lambda b, c=str(a[0])[0]: str(b)[0] == c, a[1:]))
Хотя на первый взгляд может показаться, что это нарушает то, что я сказал выше, функция map
является ленивой и поэтому только вручает функции all
то, что ей нужно, так, как это необходимо., поэтому, как только какой-то элемент не соответствует первому (начально-цифровому), возвращается логический результат, а остальная часть списка не обрабатывается.
Возвращаясь к исходному коду:
это проверяет, равен ли предыдущий номер следующему в списке
for i in range(0,len(lst)-1):
if lst[i] == lst[i+1]:
return True
Как вы утверждаете, это не работает.Для правильной работы потребуется:
for i in range(0, len(lst) - 1):
if lst[i] != lst[i + 1]:
return False
return True
Видите ли вы разницу?