gpt4 book ai didi

python - 如何在循环中检查索引值而不增加索引?

转载 作者:行者123 更新时间:2023-12-02 02:00:07 26 4
gpt4 key购买 nike

挑战来自codingbat - 对数组元素求和,除了 6 到 7 之间的所有值,也不计算 6 或 7。

我的策略是创建一个新数组“valid”,并将数组 nums 的有效元素附加到“valid”数组,然后对有效数组求和。

因为一旦检测到 6,我需要索引来检查 7,所以我的计划是枚举数组,当找到值 6 时,循环遍历数组的其余部分,直到找到 7,而不是在此过程中将值 6-7 附加到数组“valid”。

我通过 MIT Python 导师运行了我的代码,看看哪里出了问题,当我在 i+1 != 7 之后递增索引时(目的是检查数组中的下一个值是否是7) 它增加索引(它完成对数组索引的处理并移至下一个索引,而不是坚持在 6 的代码中并继续循环并检查 7)。

感谢对此的任何帮助,尤其是坚持原始策略但在代码中正确实现它的解决方案。

def sum67(nums):
valid = []
for i,c in enumerate(nums):
if c == 6:
#when a 6 comes up
if nums[i+1] == 7:
#if the next number is a 7
i+=1
break
#increment and break
else:
i+=1
#increment
else:
valid.append(c)
return sum(valid)

sum67([1, 2, 2, 6, 99, 99, 7])

编辑1:所需的输出

sum67([1, 2, 2, 6, 99, 99, 7])

是 5。(因为 1 + 2 + 2 = 5,并且排除 6、99、99 和 7,因为它们是或介于 6 和 7 之间)

最佳答案

使用迭代器和成员资格检查来搜索并跳到 7 之后:

def sum67(nums):
it = iter(nums)
return sum(x for x in it if x != 6 or 7 not in it)

这会遍历每个数字,并且通常(如果不是 6)将其包含在总和中。如果它是 6,则搜索下一个 7 并且不将其中的任何一个包含在总和中(然后在 7 之后继续下一次迭代)。

编辑:Ermahgerd...CodingBat 以某种方式荒谬地删除了 iter (表示 'iter' 未定义),尽管它是 Python 中最基本的内置函数之一。哦,好吧,我们可以使用 genexp 来代替,它在那里被接受:

def sum67(nums):
it = (x for x in nums)
return sum(x for x in it if x != 6 or 7 not in it)

关于python - 如何在循环中检查索引值而不增加索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69091360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com