因此,我正在尝试创建一个脚本,在该脚本中返回确定列表的第一个偶数。如果列表中没有偶数,则返回-1。
起初,我尝试使用str.find()
,但是我只是不知道如何使它工作。
有帮助吗?
from typing import List
def f_even(items: List[int]) -> int:
"""
>>>f_even([1, 3, 4, 6])
4
>>>f_even([1, 3])
-1
"""
even_numbers = []
even = even_numbers[0]
for number in items:
if number % 2 == 0:
even_numbers.append(number)
return even
现在,我得到一个错误,其中even = even_numbers [0];索引超出范围。我觉得我把这段代码弄得很复杂。
答案 0 :(得分:4)
在生成器上使用next()
,在不平衡的情况下返回-1
。
lst = [1, 3, 4, 6]
print(next((x for x in lst if x % 2 == 0), -1))
# 4
在特殊情况下(没有偶数):
lst = [1, 3, 3, 9]
print(next((x for x in lst if x % 2 == 0), -1))
# -1
答案 1 :(得分:0)
这是因为创建even_numbers
之后,列表为空,而even = even_numbers[0]
试图获取其中的第一个元素,而该元素不存在。
您可以将-1
分配给even
,然后在循环中对其进行更新。如果循环中没有偶数,则它仍为-1,因此该方法将返回-1。
答案 2 :(得分:0)
您可以在尝试调用if/else
之前使用even[0]
块,如果您的even
有值,则可以调用even[0]
否则返回/打印{{1} }
-1
答案 3 :(得分:0)
a = [1,2,3,4]
b = [1,3,5,7]
def even(x):
for a in x:
if a%2==0:
f = 0
break
else:
f = -1
return f
print(a,even(a))
print(b,even(b))
OP:
([1, 2, 3, 4], 0)
([1, 3, 5, 7], -1)