在不包含特定数字的范围内生成随机数

3

我已经搜索了一段时间,但没有找到解决方案。

我认为我可以用几行代码来实现,但我正在寻找一个简单的(可能只有一行)答案。

我想生成4000到5000之间的数字列表,但不包括某些数字:在我的情况下是7、8和9。是否有任何在random内部执行此操作的模块或函数?

1个回答

2

Something like this would do.

>>> num = [elem for elem in xrange(4000, 5001) if not {'7', '8', '9'}.intersection(str(elem))]
>>> choice(num)
4210
>>> choice(num)
4640
>>> choice(num)
4102

理解方法是创建一个由字符串 {'7','8','9'} 组成的集合,并查找此集合与我们的数字集合(从4000到5000,包括两个端点)的交集。如果交集为空,则该数字不具有上述任何数字,在这种情况下,我们应该将其包含并使用列表生成随机数字。

例如,

>>> {'7', '8', '9'}.intersection(str(4555))
set([])
>>> {'7', '8', '9'}.intersection(str(4765))
set(['7'])

1
那正是我想要的,谢谢。你能解释一下 .intersection(str(elem)) 是什么意思吗? - João Pereira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接