我的代码是否处于短路方式( python3)



如果至少三个数字是奇数,我们将如何调整它以返回 True?短路遍历时 找到第三个奇数 — 除非我们必须这样做,否则不要遍历整个列表。 我是python的新手,我想知道当我使用==,<=运算符时花费的时间更多,为什么?找到 3 个奇数后,这段代码是否停止遍历?

导入时间 start_time = time.time(( def d(x(:

count = 0
for num in x:
if num % 2 != 0:
count += 1
if count <= 3:
return True
return False 
print((time.time() - start_time))

f = d([1,2,4,6,8,7,3,11,16,88,66,44,22]( print((time.time((-start_time(,f(

我不知道我是否正确,但我可以对您的代码提出一些更改。首先 - 如果您想计算奇数的数量并返回True如果赔率数<= 3。你可以这样做:

>>> def count_odds(lst: list):
...     count = 0
...     for num in lst:
...             count += 1 if num % 2 else 0
...     return count <= 3
... 
>>> count_odds([1, 3, 5, 6])
True
>>> count_odds([1, 3, 7, 9, 11])
False

仅当传递给此方法的列表中有 3、2、1 或 0 个奇数时,此函数才会返回True。 另一方面,您可以通过在for 循环中使用中断来实现您的目标。这是解决方案:

>>> lst = [1, 3, 5, 7]
>>> count = 0
>>> for num in lst:
...     if count > 3:
...             break
...     count += 1 if num % 2 else 0
>>> print("More than 3") if count > 3 else print("Less than 3")
Less than 3
# Rest of your code.

还有另一种方法:

>>> def count_odds(lst: list):
...     result = list(map(lambda x: x % 2, lst))
...     return sum(result) <= 3
... 
>>> count_odds([1, 3, 7])
True
>>> count_odds([1, 3, 7, 9])
False

map 函数获取lst列表中的每个元素,然后返回True如果元素为奇数,否则返回 False。然后,sum 函数对结果列表的所有True值求和并给出答案。

最新更新