如何随机选择集合中的项目

时间:2013-10-25 13:10:26

标签: python random python-3.x set

对于我的家庭作业,我应该随机选择列表中的项目。到目前为止,我有这段代码,

import random

room = range(0, 365)
r = random.choice(room)

mySet = set(r)

但是,当我尝试运行该程序时,它表示“'int'不可迭代”。

我想知道如何解决这个问题?

6 个答案:

答案 0 :(得分:5)

set()需要一个iterable(一个列表或元组是迭代)作为它的参数,你提供了一个整数。

答案 1 :(得分:3)

如果要从集合中选择随机项目(具有固定大小):

list = random.sample(your_set, size);

或者如果您想选择随机大小的随机项目:

size = random.randint(0, your_set_size):
list = random.sample(your_set, size):

答案 2 :(得分:2)

However, when I attempt to run the program, it says that " 'int' is no iterable".

I was wondering how I can fix this problem?

使用randint

>>> from random import randint
>>> randint(0, 360)
86
>>> var = randint(0, 360)
>>> isinstance(var, int)
True

set实际上是python中的一种类型,如listdict之类的对象。因此,当您从int传入random.choice时,它会给您一个错误,因为它需要list,您可以循环使用的是iterable对象。所以,例如:

>>> set([1,3,4,5,2])
set([1, 2, 3, 4, 5])

会起作用,但你试图做的是:

>>> set(1)  # 1 is used as a number here
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'int' object is not iterable

如果您想创建一个随机列表,您可以这样做:

>>> [randint(0, 360) for _ in xrange(10)]
[234, 122, 294, 71, 204, 360, 359, 318, 273, 212]

上面的代码创建了10个随机整数供您使用。如果你想要set,你可以使用set函数来获取一个,但我认为了解 set是什么以及什么是重要的它确实。 Documentation

答案 3 :(得分:2)

你的集合中也只有一个值,因此你只需要迭代一件事。 random.choice只返回序列中的单个元素,在本例中为int。这不是python错误的原因(int不能像sneeu所说的那样迭代),但会导致与你正在寻找的结果不同。 random.sample可能是更好的选择

答案 4 :(得分:0)

根据分配的描述,您无需使用某些内容初始化set。您应该只在每个测试中添加set中的元素,并检查set的大小和插入的数量。

这就是为什么init应该是这样的:         随机导入

    room = range(0, 365)
    mySet = set()

P.S。初始化下面的代码不正确

答案 5 :(得分:0)

您有一个错误,因为您正在从int创建一个set对象。 应该从可迭代(如列表)而不是单个对象创建一个集合:

所以不是这样的: mySet = set(r) 你应该做这个 : mySet = set([r])

为什么不按照作业中的笔记进行操作?

  

注   对于每个测试,您应该使用Random.randint来选择一个数字   0到365之间使用代表生日

randint()返回一个随机整数而不必创建列表,这是您正在使用的函数所需的:choice()