Итак, вы ищете последовательную пару в списке и возвращаете 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))
Например, чтобы проверить, не совпадают ли какие-либо две последовательные строки в файле (это не будет работать с версией list
):
with open('somefile') as f:
print(same_values(f))
что ваш код должен делать. Какой вклад он должен принять? – idjaw
Кроме того, чувствительны ли случаи сравнения? Конечно, это всегда будет возвращать 'False', хотя' xs == xs [1:] 'никогда не' True'. –
Он должен принимать целые числа, такие как [1,2,3,3,5] как истинные. Он не должен быть чувствительным к регистру. –