首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pop索引超出范围-homework (列表,循环,同时循环)

pop索引超出范围-homework (列表,循环,同时循环)
EN

Stack Overflow用户
提问于 2015-03-12 16:45:34
回答 2查看 546关注 0票数 2

我目前正在做一个家庭作业问题:

编写和测试一个函数modify_list,该函数给定浮点数列表作为参数,计算列表中值的平均值,并从给定列表中删除所有大于平均值的值。

到目前为止,我的代码如下所示:

代码语言:javascript
复制
def modify_list(L):

    average = sum(L) / (len(L))
    j=0
    for J in L:
        if J>average:
            L.pop(J)
        else:
            j=j+1

L=[3,12,2,21,2,1,2]

modify_list(L)

print(L)

到目前为止,我的列表被传递给我的函数modify_list,该函数计算我的列表的平均值。然后,我有一个for循环,它获取列表中的每个值,并将其与平均值进行比较。如果列表中的值大于平均值,则通过L.pop(J)将其删除。唯一的问题是我的错误,即:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/nathan/CP/test/src/test.py", line 22, in <module>
    modify_list(L)
  File "/Users/nathan/CP/test/src/test.py", line 17, in modify_list
    L.pop(J)
IndexError: pop index out of range

我应该试试while循环而不是for循环吗?

我创建了一个while循环,它工作得很完美.虽然L.remove(我)也工作得很好。我仍然不明白为什么L.remove(我)是个坏主意。这是我的新代码:

1 def main(L):

2平均值=和(L)/ (len(L))

3个i=0

4.趁我

5如果Li>average:

6 L.pop(i)

7其他:

8个i=i+1

9

10 L=3,12,2,21,2,1,2

11 main(L)

12打印(L)

EN

回答 2

Stack Overflow用户

发布于 2015-03-12 16:51:30

除了@johnsharpe的优点外,pop还接受要删除的元素的索引,同时传递它的值。

如果您迭代列表的索引,则可以使用pop,并且在迭代时避免修改。但是要小心:当您从列表中删除某个内容时,它会变得更小,并且一些索引中现在有了新的值。

票数 -1
EN

Stack Overflow用户

发布于 2015-03-12 16:54:07

除了jonrsharpe的评论之外,问题是您使用pop()就好像它删除了项目J一样,但是这个方法实际上是为了删除索引中的条目。

例如,当您发现21高于平均值并试图用L.pop(21)删除它时,它会在列表中查找第21项。由于没有那么多的项目,您将得到一个IndexError。

使用L.remove(21)而不是pop()来修复这个问题。Remove类似于pop(),但是它用给定的值删除列表中的第一项,就像您试图做的那样。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29015576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档