Попытка удалить два младших значения из списка целых чисел, не знаете как? - PullRequest
0 голосов
/ 29 декабря 2018

Настройка игры D20 для раздора с помощью перезаписи discord.py.Настроив «кубик» для инициализации статистики, я хотел изменить некоторые вещи вместо того, чтобы делать 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 вернетсязначение не менее трех, но не более 18, это значение будет применено к первому значению values, функция будет перебирать список до завершения и вернет values в виде списка из шести целых чисел не менее трехно не более 18.

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Стандартная функция min возвращает наименьшее число в списке.Стандартная функция remove удаляет элемент со значением x (не x th) из списка.Комбинируя эти два, все, что вам нужно, это:

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

dice.remove(min(dice))
dice.remove(min(dice))
print (dice)
0 голосов
/ 30 декабря 2018

Другой подход заключается в использовании инструментов, предоставляемых модулем 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]

* Технически это мин куча ;также возможно иметь max heaps , где первый элемент самый большой / самый большой.

0 голосов
/ 29 декабря 2018

Встроенная функция min () может использоваться для выделения наименьшего числа.

Что-то вроде этого будет достаточно для удаления двух самых низких значений из вашего списка

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