【问题标题】:Is there a shorter way to remove the first two values in a list?有没有更短的方法来删除列表中的前两个值?
【发布时间】:2013-01-02 03:47:57
【问题描述】:

我想找到不包括前两个值的列表的总和:

values.remove(min(values))

values.remove(min(values))

avg = sum(values) / len(values)

有没有更简单的方法来做到这一点?

【问题讨论】:

  • 你打算做什么?
  • 你为什么要除以 1?
  • sum(qList)/1 == sum(qList)??不是吗?
  • 我认为他的意思是sum(qList)\len(qList)
  • 这只是我计算成绩的程序中的一段代码,它会删除最低的测验分数 (qList),然后考虑占总成绩的 10%。感觉就像我不需要 3 行

标签: python min average python-3.3


【解决方案1】:

是的,可以。

qAvg = sum(sorted(qList)[2:])/1

sorted 给你一个排序列表,[2:] 是一个列表slice

【讨论】:

    【解决方案2】:

    可以试试这个:

    qAvg=sum(sorted(qList)[2:])/(len(qList)-2)
    

    【讨论】:

      【解决方案3】:

      根据你想要实现的目标,你也可以期待使用 heapq 模块

      >>> qList = [randint(1,100) for _ in range(10)]
      >>> import heapq
      >>> heapq.heapify(qList)
      >>> sum(heapq.nsmallest(len(qList) - 2, qList))/(len(qList) - 2)
      50
      

      【讨论】:

      • 他想要更少的台词,而不是更多的台词。
      • @frb:更少的行并不总是 Pythonic。
      • @frb 这并不是一个好主意。 OP 并不总是知道什么是好主意,虽然我觉得这个答案可以使用更多的解释和比较作为一种方法,但它是有效的。
      • @Abhijit & Lattyware — 我很清楚。这并没有改变问题仍然询问是否可以以更短的方式完成。
      • @frb A -1 表示,从悬停文本本身来看,“这个答案没有有用。” - 与 OP 所要求的完全不同的东西可能很有用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2020-06-04
      • 2019-06-28
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多