为了账号安全,请及时绑定邮箱和手机立即绑定

试图从整数列表中删除两个最低值,不知道如何?

试图从整数列表中删除两个最低值,不知道如何?

守着星空守着你 2021-09-28 15:36:23
使用 discord.py 重写为 discord 设置 D20 游戏。为统计初始化设置“骰子”并想改变一些东西,而不是random.randint(1, 10) + random.randint(1, 10)我想“滚动”5D6,然后删除两个最低值我刚刚开始研究如何做到这一点,我找不到任何看起来有用的 python 逻辑示例,我想我会问这个问题。values = [val1, val2, val3, val4, val5, val6]for x in values:    dice = [d1, d2, d3, d4, d5]    for y in dice:        y = random.randint(1, 6)到目前为止,这是我得到的地方,我需要弄清楚如何删除两个最低值,以便我可以继续该行并将其余三个值加dice在一起实际:暂无预期:dice将返回一个不小于 3,但不大于 18 的值,该值将应用于 的第一个值values,函数将遍历列表直到完成并values作为一个不小于 3 但不小于 6 的整数的列表返回大于 18。
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

标准min函数返回列表中的最小数字。标准remove函数从列表中删除值为x的项目(不是第x个项目)。将这两者结合起来,您只需要这样:


import random

dice = [random.randint(1, 6) for i in range(5)]

print (dice)


dice.remove(min(dice))

dice.remove(min(dice))

print (dice)


查看完整回答
反对 回复 2021-09-28
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

另一种方法是使用heapq模块提供的工具。heapq 模块提供了堆,它的第一个元素总是最小的*数据结构。


要获得您想要的结果,请堆化您的列表并弹出两次以删除两个最低值。


>>> import heapq

>>> import random

>>> scores = [random.randint(1, 6) for _ in range(5)]

>>> scores

[6, 4, 3, 5, 2]

>>> heapq.heapify(scores)

>>> # First value is the smallest

>>> scores

[2, 4, 3, 5, 6]

>>> heapq.heappop(scores)

2

>>> # First value is the smallest

>>> scores

[3, 4, 6, 5]

>>> heapq.heappop(scores)

3

>>> scores

[4, 5, 6]

您还可以使用heapq.nlargest函数:


>>> scores = [random.randint(1, 6) for _ in range(5)]

>>> scores

[3, 5, 1, 4, 5]

>>> heapq.nlargest(3, scores)

[5, 5, 4]

*从技术上讲,这是一个最小 堆;也可能有max heaps,其中第一个元素是最大/最大的。


查看完整回答
反对 回复 2021-09-28
?
青春有我

TA贡献1784条经验 获得超8个赞

内置的 min() 函数可用于隔离最小数。


这样的事情就足以从列表中删除两个最低值


deletions = 0

while deletions <= 2:

    deletions +=1

    lowest_val = min(dice)

    dice.remove(lowest_val)


查看完整回答
反对 回复 2021-09-28
  • 3 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信