random.choice выбор элемента списка внутри для l oop in python - PullRequest
0 голосов
/ 22 марта 2020
num=[1,2,3,4,5,6]
for c in num:
    print("selected :",random.choice(c))

TypeError: object of type 'int' has no len()

Что не так с этим кодом? Я хочу, чтобы один элемент в списке был выбран случайным образом, используя для l oop.

Желаемый вывод:

selected :3 

Или

selected :6 

I'm зацикливание списка, потому что если выбран 1 элемент, я хочу, чтобы он был удален из списка.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Другое решение - использовать random.shuffle(num), а затем циклически повторять num, что означает, что каждый элемент будет показан один раз.

num = [1, 2, 3, 4, 5, 6]
random.shuffle(num)
for c in num:
    print("selected: ", c)
0 голосов
/ 22 марта 2020

Из документов random.choice он принимает последовательность .

random.choice (seq)

Возвращает случайный элемент из непустой последовательности seq .
Если seq пусто, возникает IndexError.

Таким образом, неправильно указывать в каждом элементе num, то есть int, что приведет к TypeError:

  File "/.../python3.8/random.py", line 288, in choice
    i = self._randbelow(len(seq))
TypeError: object of type 'int' has no len()

. Вам нужно будет ввести num сам, а затем он возвращает случайный элемент из него.

>>> num = [1,2,3,4,5,6]
>>> print("selected :", random.choice(num))
selected : 4
>>> print("selected :", random.choice(num))
selected : 5
>>> print("selected :", random.choice(num))
selected : 2

A for l oop здесь не имеет большого смысла (отсюда и вопросы в комментариях), потому что вам не нужно передавать каждый элемент random.choice.

Вы сказали, что:

Я зацикливаю список, потому что если выбран 1 элемент, я хочу, чтобы он был удален в списке.

Я не уверен, какова ваша настоящая цель для этого, но, возможно, while l oop более уместно. Например, вы можете продолжать выбирать случайные элементы из списка и удалять его из списка , пока список не пустой.

>>> num = [1, 2, 3, 4, 5, 6]
>>> while len(num) > 0:
...   n = random.choice(num)
...   print("selected : ", n)
...   num.remove(n)
...   print("num is now: ", num)
... 
selected :  3
num is now:  [1, 2, 4, 5, 6]
selected :  5
num is now:  [1, 2, 4, 6]
selected :  4
num is now:  [1, 2, 6]
selected :  1
num is now:  [2, 6]
selected :  6
num is now:  [2]
selected :  2
num is now:  []

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...