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