У меня есть список из 48 пунктов. Я хочу случайным образом выбрать 3 из этих элементов, а затем удалить эти три элемента из списка. После этого случайным образом выберите 3 новых предмета. Я хочу повторить это 16 раз, пока все ...
3 ответа
Вы можете использовать метод list.remove()
:
import numpy as np
import random
list = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8
loop = np.arange(1,16)
for i in loop:
item = random.sample(list, 3)
print(item)
for i in item:
list.remove(i)
Обратите внимание, что считается плохой практикой называть переменные именами, уже присвоенными встроенному ind, например list
. Лучше назвать ваш список другим именем, например colors
:
import random
colors = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8
for i in range(0, len(colors), 3):
item = random.sample(colors, 3)
print(item)
for i in item:
colors.remove(i)
ОБНОВИТЬ
Как было замечено b @dawg, метод list.remove()
всегда удаляет элементы из списка, ближайшего к началу списка, убирая понятие случайности.
Я понял, что было бы точнее использовать индексы вместо значений, поэтому используйте list.pop()
вместо list.remove()
:
from random import randint
colors = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8
while colors:
lst = [colors.pop(randint(0, len(colors) - 1)) for _ in range(3)]
print(lst)
np.arange(1,16)
имеет длину 15, но вы хотите выполнить цикл 16 раз. Кроме того, избегайте использования list.remove, когда в списке есть дубликаты, даже если это, вероятно, не вызовет проблем с вашей конкретной проблемой. Наконец, как было сказано, избегайте использования «списка» в качестве имени, поскольку оно уже используется Python.
Вот мое предложение, работая над индексами и используя метод list.pop (0):
l = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8
for i in range(16):
item = random.sample(range(len(l)), 3)
for k in sorted(item, reverse=True):
l.pop(k)
print(l)
#[]
Вы также можете использовать метод list.pop (index).
import random as rd
import numpy as np
lst = ['Pink', 'Red', 'Green', 'Darkgreen', 'Blue', 'Skyblue'] * 8
loop = np.arange(1,16)
for i in loop:
for k in range(0,3):
item = lst.pop(rd.choice(range(0,len(lst))))
print(item)
.pop (index) делает две вещи. Он возвращает элемент по заданному индексу списка. Затем он удаляет этот элемент из списка.
Внутри функции .pop () мы имеем следующее: случайный выбор числа (который является индексом) выбор представляет собой список чисел от 0 до длины списка (исключая).
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.