我知道这应该更容易,但我在比较浮点值时遇到问题。
我有一些非常基本的代码,可以做一些事情:
packages
列表中删除。def process_packages(package_list):
light_pkgs = []
heavy_pkgs = []
light_weight = 5.00
heavy_weight = 15.00
for i in package_list:
if i < light_weight:
light_pkgs.append(i)
elif i > heavy_weight:
heavy_pkgs.append(i)
packages.remove(i)
return light_pkgs, heavy_pkgs
packages = [2.4, 3.44, 4.55, 4.9, 5.11, 5.31, 5.61, 5.99, 6.11, 7.34, 7.9, 9, 11.3, 15.1, 15.31, 15.68, 15.9, 16.7, 19.3, 21]
print(process_packages(packages))
print(packages)
我相信,由于精度错误,我的代码无法识别 15.xx 范围内的几个数字。
此外,我仅限于使用内置的 Python 函数。
预期输出:
([2.4, 3.44, 4.55, 4.9], [15.1, 15.31, 15.68, 15.9, 16.7, 19.3, 21])
[2.4, 3.44, 4.55, 4.9, 5.11, 5.31, 5.61, 5.99, 6.11, 7.34, 7.9, 9, 11.3]
实际产量:
([2.4, 3.44, 4.55, 4.9], [15.1, 15.68, 16.7, 21])
[2.4, 3.44, 4.55, 4.9, 5.11, 5.31, 5.61, 5.99, 6.11, 7.34, 7.9, 9, 11.3, 15.31, 15.9, 19.3]
正如您所看到的,15 以上的几个数字没有被添加到 Heavy_pkgs 列表中,也没有从原始包列表中删除。
您遇到了以下问题:如何在迭代时从列表中删除项目?需要额外的步骤。
全局作用域中的packages
与函数作用域中的 package_list
是相同的(它们都是同一个 list
的别名)。当您在迭代它时 remove
时,您会跳过对紧随已删除元素之后的元素的迭代(因为它向下移动一个槽,并且迭代器在下一个循环中前进到该槽)。
使用中等权重构建一个新的
list
,并在循环完成后替换 package_list
的内容,一切都应该可以正常工作。