首先...我是Python新手...所以我道歉,如果这可能是你在这里见过的最基本的问题。基本上,我想解决Kaggle Python(初学者)课程中的一个问题,以解决以下挑战:
def menu_is_boring(meals):
"""Given a list of meals served over some period of time, return True if the
same meal has ever been served two days in a row, and False otherwise.
"""
我创建了下面的嵌套for循环,目的是用这种方法比较列表和它自身,一旦发现重复,它就返回true:
for i in range(len(meals)):
for j in range(i+1, len(meals)):
if j == i:
return True
return False
输入为:meals=['垃圾邮件','鸡蛋','垃圾邮件','垃圾邮件','培根','垃圾邮件']
所以我会期待一个“True”(连续两次垃圾邮件),但是我的函数返回一个False。它看起来很简单...但是显然我遗漏了一些东西。也许我在这里遗漏了一些关于嵌套循环的基本东西。我在谷歌上搜索了其他嵌套循环用于复制的问题...但是看不到与我所做的有明显的区别。
2条答案
按热度按时间42fyovps1#
一个更简单的解决方案是只使用一个循环,并使用
i + 1
作为第二个索引,但请注意,您必须缩短循环的长度,否则您将在最后一个循环周期中越界。rdrgkggo2#
另一种处理方法是使用
zip()
函数将原始列表与原始列表的偏移量为1的位置绑定,并将这些值作为if a == b
进行比较。例如:
这将构建一个布尔值的生成器表达式。
any()
函数将"短路",并在找到True
值后立即返回;从而使该功能非常有效。输出: