下面是我为kaggle上的作业编写的代码。但是无法理解为什么它无法按预期工作。这是要求: “”“给出一段时间内提供的饭菜清单,如果 同一餐已经连续两天供应了,否则为False。 “”“
下面是编写的代码:
def menu_is_boring(meals):
return any([ meals[l] == meals[l+1] for l in range(0,len(meals)-2) ])
给定餐点的True预期返回值= ['Spam','Spam'],但改为False。
答案 0 :(得分:3)
在您的示例中,len(meals)
为2,所以len(meals)-2
为0
,因此范围为空。
您只需要减去1。
尝试一下:
def menu_is_boring(meals):
return any([meals[l] == meals[l + 1] for l in range(0, len(meals) - 1)])
print(menu_is_boring(["Spam", "Spam"]))
输出:
是
值得注意的是python的range
不包含stop
参数(即list(range(1,5))
是[1, 2, 3, 4]
)
答案 1 :(得分:3)
当您要比较一个范围内的两个连续值时,可以使用zip
创建对,并在这些对上进行迭代并进行比较:
any(i == j for i, j in zip(meals, meals[1:]))
这里我使用了生成器表达式,但是如果需要,您可以自由使用列表推导。
另一种选择是使用itertools.tee
创建两个迭代器,使用第二个迭代器中的第一个元素,然后对对进行迭代:
def menu_is_boring(meals):
it_1, it_2 = itertools.tee(meals)
next(it_2)
return any(i == j for i, j in zip(it_1, it_2))
这比第一个慢。
例如:
In [1104]: def menu_is_boring(meals):
...: return any(i == j for i, j in zip(meals, meals[1:]))
...:
In [1105]: meals=['Spam', 'Spam']
In [1106]: menu_is_boring(meals)
Out[1106]: True
In [1107]: def menu_is_boring(meals):
...: it_1, it_2 = itertools.tee(meals)
...: next(it_2)
...: return any(i == j for i, j in zip(it_1, it_2))
...:
In [1108]: menu_is_boring(meals)
Out[1108]: True
答案 2 :(得分:0)
function defer([first, ...rest]) {
return (...values) => rest.reduce((acc, str, i) => acc + values[i] + str, first);
}
var createPFunc = (template) => {
return (string) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(template(string));
resolve();
}, 2000);
})
}
}
var f1 = createPFunc(defer`String 1: ${'string'}`);
var f2 = createPFunc(defer`String 2: ${'string'}`);
f1(`search 1`).then(() => f2('search 2'))
// result:
// String 1: search 1
// String 2: search 2