![](/img/trans.png)
[英]How do I create a list of values in a column from several values from another column in a pandas dataframe?
[英]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.