我试图从10的列表中随机选取7个数字,我编写了以下代码来帮助我做到这一点:
s=set(range(1,10))
import random
i = []
while len(i)<8:
s.remove(random.choice(list(s)))
i.append(s)
print i
一个重要的一点是从组中删除数字,以防止它被拾取两次
但是,当我运行代码时,我得到一个错误:
Traceback (most recent call last):
File "randomTest.py", line 7, in <module>
s.remove(random.choice(list(s)))
File "/usr/lib/python2.7/random.py", line 273, in choice
return seq[int(self.random() * len(seq))] # raises IndexError if seq is empty
IndexError: list index out of range
是什么导致了错误?如何修复错误?你知道吗
您的代码不应该产生
IndexError: list index out of range
,因为在您的示例中s
包含10个元素,您选择7。 可能是在另一个集合上执行此代码时引发了此异常。你知道吗但是,您应该修复一个错误,该错误会阻止您看到所寻求的结果:
每次将所有
s
附加到i
中时,只需附加所选的值。你知道吗建议:
不要重新发明轮子。你要找的是^{} -
尽管处理
set
实际上看起来像是一个实现细节(可能不适用于超过21个元素的集合),因为random.sample
在内部将它接收到的iterable(第一个参数)转换为https://hg.python.org/cpython/file/c6880edaf6f3/Lib/random.py#l330处的列表。最好不要依赖此实现细节,而是手动将集合/序列转换为列表或序列-根据文件-
正如在评论中提到的,您可能并不真正需要在这里设置。你知道吗
相关问题 更多 >
编程相关推荐