确定相邻元素是否相似的函数

时间:2017-11-26 19:40:12

标签: python for-loop

我已经坚持了一段时间而且我一直遇到问题,我正在尝试创建一个函数,如果列表中至少有一对相邻元素相等,则返回true。

测试用例:

[1,2,3] - >假

[1,2,2,3] - >真

[2,6,3,6] - >假

['a','b','c','d','d'] - >真

def equal_adjacent_elements(l):
    for x in range(len(l)):
        if l[x] == l[x+1] or l[x] == l[x-1]:
            return True
        else:
            return False

我遇到的问题是断言错误,我相信这是因为我的循环。一旦我找到一对相等的返回值将不会保持不变,因为我的循环将评估列表中的下一个值。所以我只需要找到至少一对,但我不知道我会怎么做。

4 个答案:

答案 0 :(得分:1)

我做了一些改动。它现在应该工作。

def equal_adjacent_elements(l):
    for x in range(len(l)-1):
        if l[x] == l[x+1]:
            return True
    return False

或使用any的短篇,

def equal_adjacent_elements(l)
    return any( l[x] == l[x+1] for x in range(len(l)-1) )

答案 1 :(得分:1)

您可以1 zip列出自己的any列表并使用enter image description here来缩短搜索模式:

def equal_adjacent_elements(l):
    return any(x == y for x, y in zip(l, l[1:]))

答案 2 :(得分:0)

这里有两个问题:

  1. 这里的索引可能会溢出;
  2. 从有两个不相等的连续元素的那一刻起立即返回False,您应该在False循环后返回for
  3. 此处的索引问题是x的范围从0到(不包括)len(l)。这意味着x-1的范围从-1(列表的最后一个元素)到len(l)-1x+11len(l)(包含)。但是列表不是很长,所以你从列表边界中得到一个索引,这是一个错误。

    然而,更Pythonic的方法是在列表zip(..)上使用l,在列表中使用“ tail ”(省略第一个元素的列表)。所以zip(l, l[1:])

    我们可以迭代x,yl的每一对l[1:]。在x == y的情况下,我们有这样的元素并返回True

    如果我们找不到这样的对,我们最终会返回'False。

    所以正确的实施是:

    def equal_adjacent_elements(l):
        for x,y in zip(l, l[1:]):
            if x == y:
                return True
        return False
    但是,Python有一个内置any,从我们提供的迭代包含至少一个True的那一刻起,它将返回True;如果没有元素具有真实性False,则True

    因此,我们可以使用any内置函数将上述代码转换为某些内容:

    def equal_adjacent_elements(l):
        return any(x == y for x,y in zip(l, l[1:]))

答案 3 :(得分:0)

我对python有点新手,但无论如何希望这很容易

def equal_adjacent_elements(l):
    try:
        for i in range(0, len(l)):
            if l[i] == l[i+1]:
                return True
    except IndexError:
        return False