检查序列是否具有连续的相同字符

时间:2016-10-08 23:36:12

标签: python loops character sequence

对于这个函数,当一个序列具有连续的相同字符时,我试图让它返回“True”,并且当序列没有时返回“False”。例如,neighboring_twins(1,2,1,4,1)应该返回Falseneighboring_twins(1,2,3,3,5)应该返回True,因为有两个相同的字符直接相邻(两个3)。

这是我到目前为止的代码。我不认为Python搜索"ii"是正确的方法,因为我不断收到语法错误。我不确定如何指示Python搜索连续的相同字符但假设我应该使用for循环。

def neighboring_twins(xs):

    for i in xs:
        if ii = True
            return True
        elif ii = False
            return False

编辑:我想在不从其他模块导入的情况下以最简单的方式完成此任务。

2 个答案:

答案 0 :(得分:0)

来自itertools' recipiespairwise函数将返回连续项对的列表。从现在开始,您只需要清楚地了解您的需求:

from itertools import tee, izip
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

def neighboring_twins(xs):
    return any([x for x in pairwise(xs) if x[0]==x[1]])

或者,直接,不复制pairwise

from itertools import tee, izip
def neighboring_twins(xs):
    a, b = tee(xs)
    next(b, None)
    return any([x for x in izip(a, b) if x[0]==x[1]])

修改
您可以在不使用itertools的情况下实现相同的功能,尽管性能会有所下降:

def neighboring_twins(xs):
    return any([x for x in zip(xs, xs[1::]) if x[0]==x[1]])

答案 1 :(得分:0)

您遇到语法错误,因为if ii要求Python解释器检查变量ii并查看它是否为真。我建议迭代列表并检查下一个元素,看它是否等于下一个元素。 enumerate()对您有用。

我还注意到您正在使用if ii = True,它将True值分配给ii而不是检查ii是否为True。你可能想要if ii == True==检查相等性和单个等号为变量赋值。