试图将两个最小值从整数列表中删除,不确定如何做吗?

时间:2018-12-29 00:36:58

标签: python discord.py discord.py-rewrite

使用discord.py重写为Dord游戏设置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但不大于18的整数的列表。

3 个答案:

答案 0 :(得分:0)

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

将这样的两个最低值从列表中删除就足够了

deletions = 0
while deletions <= 2:
    deletions +=1
    lowest_val = min(dice)
    dice.remove(lowest_val)

答案 1 :(得分:0)

标准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)

答案 2 :(得分:0)

另一种方法是使用heapq模块提供的工具。 heapq模块提供 heaps 数据结构,其第一个元素始终是最小的 *

要获得所需的结果,请heapify列表并弹出两次以删除两个最低值。

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

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