对于我的家庭作业,我应该随机选择列表中的项目。到目前为止,我有这段代码,
import random
room = range(0, 365)
r = random.choice(room)
mySet = set(r)
但是,当我尝试运行该程序时,它表示“'int'不可迭代”。
我想知道如何解决这个问题?
答案 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中的一种类型,如list
或dict
之类的对象。因此,当您从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()