2016-10-08 7 views
0

Изучение 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 
+0

что ваш код должен делать. Какой вклад он должен принять? – idjaw

+0

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

+0

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

ответ

3

Итак, вы ищете последовательную пару в списке и возвращаете 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)) 
+0

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