我已经坚持了一段时间而且我一直遇到问题,我正在尝试创建一个函数,如果列表中至少有一对相邻元素相等,则返回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
我遇到的问题是断言错误,我相信这是因为我的循环。一旦我找到一对相等的返回值将不会保持不变,因为我的循环将评估列表中的下一个值。所以我只需要找到至少一对,但我不知道我会怎么做。
答案 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)
def equal_adjacent_elements(l):
return any(x == y for x, y in zip(l, l[1:]))
答案 2 :(得分:0)
这里有两个问题:
False
,您应该在False
循环后返回for
。此处的索引问题是x
的范围从0
到(不包括)len(l)
。这意味着x-1
的范围从-1
(列表的最后一个元素)到len(l)-1
和x+1
从1
到len(l)
(包含)。但是列表不是很长,所以你从列表边界中得到一个索引,这是一个错误。
然而,更Pythonic的方法是在列表zip(..)
上使用l
,在列表中使用“ tail ”(省略第一个元素的列表)。所以zip(l, l[1:])
。
我们可以迭代x,y
和l
的每一对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