Python 从列表中删除最大的数字,然后对剩余的数字求和

Python 从列表中删除最大的数字,然后对剩余的数字求和,python,csv,Python,Csv,我有一个数字列表(27763行,csv文件),我想做以下事情: 在列表中查找最大值并将其放入另一个名为maximumvalue的列表中 将剩余的数字相加,计算它们的总和,并将其放入另一个名为totalvalue的列表中 删除最大数量,并反复执行上述步骤 我已经编写了以下脚本,但它仅显示maximumvalue列表中的13882个数字,这与27763完全不同: sample=open("file.csv") sampledata=csv.reader(sample) B=[] max

我有一个数字列表(27763行,csv文件),我想做以下事情:

  • 在列表中查找最大值并将其放入另一个名为maximumvalue的列表中
  • 将剩余的数字相加,计算它们的总和,并将其放入另一个名为totalvalue的列表中
  • 删除最大数量,并反复执行上述步骤
  • 我已经编写了以下脚本,但它仅显示maximumvalue列表中的13882个数字,这与27763完全不同:

    sample=open("file.csv")   
    sampledata=csv.reader(sample)  
    B=[]  
    maximumvalues=[]  
    totalvalues=[]  
    for row in sampledata: 
       values=row[2]  
       B.append(float(values))
    for value in B:  
       maximumvalues.append(max(B))  
       totalvalues.append(sum(B))  
       B.remove(max(B))
    

    如果看不到您的数据,很难判断-但是您是否想到列表中可能有超过1个最大值?对初始值进行排序可能有助于:

    maximuvalues = sorted(B, reverse=True)
    totalvalues = [sum(B)]
    for val in itertools.islice(maximumvalues, 1, None):
        totalvalues.append(totalvalues[-1] - val)
    

    这是正确的,但是如果只需要减去最大数量*它是发生次数,排序效率就很低