【发布时间】:2016-12-14 08:49:38
【问题描述】:
我正在做一个小型练习项目,但我找不到答案。我想掷 4d6,把最低的,然后把剩下的三个加在一起。我发现 heapq.nlargest 可以为我找到最高的 N 个数字,但我不知道如何将其输出求和为一个数字。
到目前为止,我未完成的代码如下所示:
import random
import heapq
print "How many stats would you like to roll?"
dice = input
for i in range(dice()):
roll1 = random.randint(1, 6)
roll2 = random.randint(1, 6)
roll3 = random.randint(1, 6)
roll4 = random.randint(1, 6)
allrolls = (roll1, roll2, roll3, roll4)
high3 = heapq.nlargest(3, allrolls)
【问题讨论】:
-
sum函数。你怎么知道heapq.nlargest而不是sum函数?它接受任何可迭代对象并将其相加,heapq.nlargest返回一个可迭代对象(准确地说是list)。 -
请注意,在这种情况下,
heapq.nlargest对您的帮助很少(当您需要较大列表中的少数值时,它最有用)。sum(allrolls) - min(allrolls)或sum(sorted(allrolls)[-3:])在理论上和实践上都可能更有效。 -
我在这里找到了一个答案,关于如何打印一个小列表的 x 最大数字,它运作良好。感谢您提供更高效的版本!
标签: python