簡體   English   中英

如何從整數列表中選擇幾個最大值?

[英]How do I choose several maximum values from a list of integers?

將Python 3.6與PyCharm結合使用,我從12個整數的初始化列表開始。 這使我可以對列表中的每個值應用隨機數。 然后,我想從12個選項的列表中選擇最高的六個。 這是我用來完成此操作的代碼:

import random as rnd

# Initialize with a list of 12 zeros
options = [0, 0, 0, 0,
           0, 0, 0, 0,
           0, 0, 0, 0]

# Loop through the list, replacing zeros with random numbers
for i in range(len(options)):
    options[i] = rnd.randint(3, 18)

# Next, find the six max
options_copy = options[:]
largest_1 = max(options_copy)   # This seems very inefficient.
options_copy.remove(largest_1)  # 
largest_2 = max(options_copy)   # What if I need the top 7,000 from 
options_copy.remove(largest_2)  # a list of 1 million?
largest_3 = max(options_copy)   #
options_copy.remove(largest_3)  #
largest_4 = max(options_copy)   #
options_copy.remove(largest_4)  #
largest_5 = max(options_copy)   #
options_copy.remove(largest_5)  #
largest_6 = max(options_copy)   #
options_copy.remove(largest_6)  #

# Collect the best into it's own list.
best = [largest_1, largest_2, largest_3,
        largest_4, largest_5, largest_6]

正如上面代碼中的注釋部分所述,這似乎效率很低。 例如,假設我需要從一百萬個整數列表中找到前7,000個。 有沒有一種有效的循環機制可以達到相同的結果?

使用random.sample生成12個隨機數的列表,然后反向排序並獲取前6個:

import random

options = random.sample(range(3, 18), 12)
print(options)

best = sorted(options, reverse=True)[:6]


更簡潔地說:

 best = sorted(random.sample(range(3, 18), 12), reverse=True)[:6] 

您可以使用列表推導和切片來執行此操作,以便在排序后獲得前6個值:

sorted((rnd.randint(3, 18) for _ in range(12)), reverse=True)[:6]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM