Python 如何从整数列表中选择几个最大值?

Python 如何从整数列表中选择几个最大值?,python,python-3.x,pycharm,Python,Python 3.x,Pycharm,使用PyCharm的Python3.6,我从一个包含12个整数的初始化列表开始。这允许我对列表中的每个值应用一个随机数。然后我想从12个选项中选择最高的6个。以下是我用来完成此任务的代码: 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, r

使用PyCharm的Python3.6,我从一个包含12个整数的初始化列表开始。这允许我对列表中的每个值应用一个随机数。然后我想从12个选项中选择最高的6个。以下是我用来完成此任务的代码:

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]
正如上面代码中的注释部分所说,这似乎效率很低。例如,假设我需要从100万个整数列表中找到前7000个。是否有一种有效的循环机制可以实现相同的结果

使用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]
使用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]

您可以使用列表理解和切片来完成此操作,以在排序后获得前6个值:

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

一个简单的解决方案是使用sort并从列表中获取最后六项一个简单的解决方案是使用sort并从列表中获取最后六项