【发布时间】:2014-01-24 10:43:44
【问题描述】:
问题是从数字中删除负数。
remove_negs([1, 2, 3, -3, 6, -1, -3, 1])执行时,结果为:[1, 2, 3, 6, -3, 1]。结果假定为[1, 2, 3, 6, 3, 1]。发生的情况是,如果连续有两个负数(例如,-1, -3),那么第二个数字将不会被删除。
定义主():
numbers = input("请输入数字列表:")
remove_negs(数字)
def remove_negs(num_list):
'''Remove the negative numbers from the list num_list.'''
for item in num_list:
if item < 0:
num_list.remove(item)
print num_list
main()
【问题讨论】:
-
对于检查 val >= 0 的列表理解来说,这听起来不错。
-
不要从您正在迭代的列表中删除项目,因为这会更改项目的索引,您最终可能会跳过某些元素。
-
正如其他人所说,在迭代数据容器时不要更改它的内容。迭代一个副本 - 对于列表中的项目(num_list):
-
另外,当您已经知道某个项目在哪里时,您不应该调用
remove来删除它。这(a)可能是错误的,因为remove删除了等于item的第一个项目,这可能不是您想要的,并且(b)很慢,因为这意味着您必须搜索整个列表才能找到即使您已经知道它在哪里。del num_list[index]总是更好。但是你怎么知道索引?很简单:for index, item in enumerate(num_list):。 (这只是一个旁注;它不会解决你的实际问题……但已经有很好的答案和 cmets 了。)
标签: python list negative-number