Как удалить случайный элемент из массива.питон - PullRequest
0 голосов
/ 14 сентября 2018

Итак, я начну с объяснения контекста проблемы.

У меня есть массив, заполненный несколькими строками, и я хочу выбрать случайные элементы из этого массива, но как только элемент будет выбран один раз,его нельзя выбрать снова.Мое решение для этого было просто удалить его из массива.

Я пытался:

dogs_array =['Bob', 'Fred', 'Jeff', 'Rick', 'Alice', 'Joe','Max', 'Will']
for x in range(3):
    i  = random.randint(0, 7)
    print(dogs_array[i])
    dogs_array.remove(i)

Однако я получаю сообщение об ошибке: ValueError: list.remove (x): x нет в списке

Что мне делать?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Метод удаления в Python принимает элемент, а не только индекс. Ваше решение будет работать, если вы используете dogs_array.remove(dogs_array[i])

0 голосов
/ 14 сентября 2018

Как насчет использования метода pop, очень хорошо для того, что вы делаете здесь:

import random

dogs = ['Bob', 'Fred', 'Jess', 'Rick', 'Alice', 'Joe', 'Max', 'Will']

for x in range(3):
    selection = random.randint(0, len(dogs)-1)
    goner = dogs.pop(selection)
    print(goner)

выход

(xenial)vash@localhost:~/python$ python3.7 pop.py
Max
Bob
Joe

При использовании pop вам нужно будет использовать len из-за того, что список будет менять размеры, и вам потребуется случайное int для этого нового размера списка.

0 голосов
/ 14 сентября 2018

Если вы готовы использовать для этого numpy, функция np.random.choice позволяет вам выбрать размер выборки, а не циклически проходить через range(3), как вы пытались, и аргумент replace=False гарантирует, что вы не выберете один и тот же дважды:

import numpy as np

dogs_array =['Bob', 'Fred', 'Jeff', 'Rick', 'Alice', 'Joe','Max', 'Will']

my_selection = np.random.choice(dogs_array, size=3, replace=False)

>>> my_selection
array(['Fred', 'Alice', 'Jeff'], dtype='<U5')
...