gpt4 book ai didi

python - index 1/2nd 列表项被无缘无故地跳过

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:36 25 4
gpt4 key购买 nike

我有一个函数,它接受一个列表并删除最小和最大元素(的一个实例),然后取剩余元素的平均值。运行它不会出现任何错误,但在检查结果时我意识到它们是不正确的。这是程序:

def centered_average(x):
x.sort()
y = 0
for i in x:
if x.index(i) == 0 or x.index(i) == (len(x)-1):
print(i, "is being removed")
x.remove(i)
i +=1
else:
y += i
print(i, "is being added")
return (y / len(x))

def average(x):
return sum(x)/len(x)

(打印功能已放入检查)

通过列表

x = [1,2,3,4,5]

结果是:

1 is being removed
3 is being added
4 is being added
5 is being removed
2.3333333333333335

因此,我们可以假设函数中没有使用 x[1],我想知道为什么。

在此先感谢您的帮助。

最佳答案

在删除您已经在 Python 中迭代的列表元素时,您需要特别小心,就像您在函数中所做的那样。 Python 正在查看列表的索引并使用它们,但是当您删除第一个元素并且列表就地更新时,之前的第二个元素 (x[1]) 现在是第一个 ( x[0]),因此将被跳过。

但是,有一种更简单的方法可以做到这一点,它不需要这样的循环和额外的条件,如果您只想取不是第一个或最后一个元素的平均值:

def centered_average(x):
x.sort()
if len(x) <= 2:
print "Cannot run with 2 or fewer elements..."
return 0
else:
return sum(x[1:-1])/(len(x)-2.00)

还有其他方法可以做到这一点,但这种方法应该足够快,并且只要 x 是一个列表,就可以满足您提供的任何情况。希望这会有所帮助。

关于python - index 1/2nd 列表项被无缘无故地跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39168652/

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