#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. Спасибо за объяснение. Не знал об итераторе.