当前位置: 代码迷 >> python >> python中for循环中列表元素的random.choice选择
  详细解决方案

python中for循环中列表元素的random.choice选择

热度:27   发布时间:2023-07-16 11:09:47.0
num=[1,2,3,4,5,6]
for c in num:
    print("selected :",random.choice(c))

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

这段代码有什么问题? 我希望使用 for 循环随机选择列表中的单个元素。

期望的输出:

selected :3 

或者

selected :6 

我正在循环一个列表,因为如果选择了 1 个元素,我希望它从列表中删除。

从文档中,它接受一个序列

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

for循环在这里没有多大意义(因此是评论中的问题),因为您不需要将每个元素传递给random.choice

你之前这么说:

我正在循环一个列表,因为如果选择了 1 个元素,我希望它在列表中被删除。

我不确定你这样做的实际目的是什么,但也许while循环更合适。 例如,您可以继续从列表中选择随机元素,在列表不为空将其从列表中删除。

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

另一种解决方案是使用random.shuffle(num)然后循环遍历num这意味着每个项目将显示一次。

num = [1, 2, 3, 4, 5, 6]
random.shuffle(num)
for c in num:
    print("selected: ", c)
  相关解决方案