使用python查找列表中最多3个元素

使用python查找列表中最多3个元素,python,arrays,list,Python,Arrays,List,如何搜索列表中的三个最大元素,并将其在同一索引中替换为除以2的结果 请问我做错了什么: 输入是:2588191515712011 输出应为:25895.517.571011 显示的结果是否索引超出范围 def numberInput(line): lineInput = [int(i) for i in line.split()] min1 = min(lineInput) for j in range(len(lineInput)): if lineInput[j]

如何搜索列表中的三个最大元素,并将其在同一索引中替换为除以2的结果

请问我做错了什么:

输入是:
2588191515712011

输出应为:
25895.517.571011

显示的结果是否索引超出范围

def numberInput(line):
  lineInput = [int(i) for i in line.split()]

  min1 = min(lineInput)

  for j in range(len(lineInput)):

     if lineInput[j]>min1 and lineInput[j] > lineInput[j+1]:

           max1 = lineInput[j]/float(2)
     else:
           max1 = lineInput[j]/float(2)
           lineInput[j] = max1

     lineInput[j] = max1
  return(lineInput)

number = '2 5 8 19 1 15 7 20 11' 
print(numberInput(number))

为什么不浏览一下列表(代码可能要长一点,但肯定很有效)

def编号输入(行):
lineInput=[int(i)代表行中的i.split()]
n=len(行输入)

如果n如果列表的顺序不重要,您可以简单地按降序对列表进行排序,然后将前3个元素替换为

a = [2, 5, 8, 19, 1, 15, 7, 20, 11]
a.sort(reverse = True)
a[0] = a[0] / 2
a[1] = a[1] / 2
a[2] = a[2] / 2
输出

[10.0, 9.5, 7.5, 11, 8, 7, 5, 2, 1]
[2, 5, 8, 9.5, 1, 7.5, 7, 10.0, 11]
如果订单很重要

import heapq
largest = heapq.nlargest(3, a)
for i in range(len(a)):
    if a[i] in largest:
        a[i] = a[i] / 2    
输出

[10.0, 9.5, 7.5, 11, 8, 7, 5, 2, 1]
[2, 5, 8, 9.5, 1, 7.5, 7, 10.0, 11]

heapq.nlargest()
是heapq的一个函数,它可以从列表中给出n个最大的数字。由于Python中的列表没有replace函数,因此必须遍历列表一次,然后手动替换。希望这能解决您的问题。

为什么您期望的平均值总是数字/2?除以2不是平均值(数字的一半),当您到达列表的最后一个元素时,
lineInput[j+1]
在列表之外。您需要使用
range(len(lineInput)-1)
我尝试了这个(range(len(lineInput)-1)),但没有成功work@MateenUlhaq:应该快一点;它是
O(n log k)
(在本例中
k
是3)而不是
O(n log n)
你在一个完整的排序上支付(无论它在实践中是否更快都需要测试;
sorted
是用C实现的,
nlargest
是用C加速助手的Python,所以它比big-O可能让你相信的要慢)。此外,正如@AMC在上文中所评论的,python的惯例是使用下划线而不是camelCase,因此您通常将
lineInput
numberInput
分别视为
line\u input
number\u input