Последовательные значения?

#python #function

#python #функция

Вопрос:

Изучаю python, но не могу сообщить функции, чтобы найти последовательные местоположения с одинаковыми значениями. Когда я запускаю код, ошибок нет, но выдает неверный вывод. Предложения о том, что изменить?

 def same_values(xs):
    same = False
    for i in (xs):
        if xs == xs[1:]:
            same = True
    else:
        return same
same_values('Misses') # This should return as true
  

Комментарии:

1. Пожалуйста, объясните, что должен делать ваш код. Какой ввод он должен принимать?

2. Кроме того, чувствительны ли сравнения к регистру? Конечно, это всегда будет возвращаться False , но xs == xs[1:] никогда True .

3. Он должен принимать целые числа, такие как [1,2,3,3,5], как true . Не обязательно учитывать регистр.

Ответ №1:

Итак, вы ищете последовательную пару в списке и возвращаете true, если вы ее найдете.

 def same_values(xs):
    for i in range(len(xs)-1):
        if xs[i] == xs[i 1]:
            return True
    return False

>>> same_values('misses')
True
>>> same_values('mises')
False
  

Даст вам правильный ответ.
Однако python обладает мощной алгеброй итераторов. Преимущество этого заключается в том, что он будет работать с итераторами (итераторы обычно не поддерживаются len() ), а также со списками:

 import itertools as it

def same_values(xs):
    a, b = it.tee(xs)
    next(b, None)
    return any(x == y for x, y in zip(a, b))
  

Этот шаблон описывается в itertools рецептах как pairwise :

 import itertools as it

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = it.tee(iterable)
    next(b, None)
    return zip(a, b)

def same_values(xs):
    return any(x == y for x, y in pairwise(xs))
  

Например, чтобы проверить, совпадают ли какие-либо 2 последовательные строки в файле (это не будет работать с list версией):

 with open('somefile') as f:
    print(same_values(f))
  

Комментарии:

1. Спасибо за объяснение. Не знал об итераторе.