【问题标题】:Removing the lowest numbers from a list从列表中删除最小的数字
【发布时间】:2016-08-18 02:04:47
【问题描述】:

我正在尝试编写一个函数来删除最小的数字,然后平均列表中的剩余数字。有没有办法在不使用sorted()sort() 的情况下从列表中删除最小的两个或多个数字?就像使用min() 结合range()

到目前为止我所拥有的:

lst = [90, 100, 95, 95]
lst.remove(min(lst))
print(sum(lst) / len(lst))

【问题讨论】:

  • 鉴于第二低的数字并列,您甚至期望的输出是多少?
  • 只是数字的平均值。去掉 90 并对剩余的数字取平均值得到 97.5。
  • 去掉 2 个最小的数字后,lst 应该包含什么?
  • 第一个,然后是两个,然后是三个,所以最后一个是 100,也是平均值。

标签: python python-3.x min


【解决方案1】:

我会通过循环运行它

>>> lst = [90,100,95,95]
>>> for i in range(0, 1):            # This removes n=1 items
...     lst.remove(min(lst))
... 
>>> lst
[100, 95, 95]
>>> lst = [90,100,95,95]
>>> for i in range(0, 2):           # This removes n=2 items
...     lst.remove(min(lst))
... 
>>> lst
[100, 95]

【讨论】:

  • 因为list.remove 不会删除第二次出现的 95。
【解决方案2】:

list.remove 删除列表中的第一个匹配值。为了删除所有出现的当前最低数字,您必须将其称为 list.count(min(list)) 次。

这是从lst 中删除n 最小数字且不涉及list.remove 的函数:

def remove_n_smallest(lst, n):
    for _ in range(n):
        m = min(lst)
        lst[:] = (x for x in lst if x != m)

这是您问题中lst 的示例:

>>> remove_n_smallest(lst, 2)
>>> lst
[100]
>>> sum(lst) / len(lst)
100.0

【讨论】:

  • 谢谢!现在我在实现它时遇到了一些麻烦。当我运行代码时,它没有打印任何东西。
  • @DA_F:你是否同时执行了函数定义下面的例子?
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
相关资源
最近更新 更多