连续的价值观?

时间:2016-10-08 14:55:09

标签: python function

学习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 个答案:

答案 0 :(得分: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))

例如,检查文件中的任何2个连续行是否相同(这不适用于list版本):

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