学习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 :(得分: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))