【发布时间】:2015-03-12 16:45:34
【问题描述】:
我目前正在做一个家庭作业问题:
编写并测试一个函数
modify_list,给定一个浮动列表 点数作为参数,计算值的平均值 列表并删除所有大于给定平均值的值 列表。
到目前为止,我的代码如下所示:
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) 将其删除。唯一的问题是我的错误,即:
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(i) 也运行良好。我仍然不明白为什么 L.remove(i) 是一个坏主意。 这是我的新代码:
1 def main(L):
2 平均值 = sum(L) / (len(L))
3 i=0
4 而我
5 如果 L[i]>平均:
6 L.pop(i)
其他 7 个:
8 i=i+1
9
10 L=[3,12,2,21,2,1,2]
11 主(左)
12 打印(L)
【问题讨论】:
-
您在迭代列表时更改了列表的长度 - 这是一个非常糟糕的主意。参见例如stackoverflow.com/q/1798796/3001761
-
@but 我现在得到:TypeError: 'list' object is not callable because L(i), insead use this, L[i]
标签: python