import random
s = set()
N = 100 # Number of items that will be appended to the set
M = 200 # Maximum random number
random_candidates = list(range(M))
for _ in range(N):
numbers_left = len(random_candidates)
# Choose a random number and remove it from the candidate list
number = random_candidates.pop(random.randrange(numbers_left))
s.add(number)
import random
s = set()
N = 100 # Number of items that will be appended to the set
M = 2000 # Maximum random number
for _ in range(N):
random_candidate = random.randrange(M)
while random_candidate in s:
random_candidate = random.randrange(M)
s.add(random_candidate)
set()
只能包含唯一项。如果您尝试向set()
添加一个已经存在的项,它将被忽略:在原始代码中,您实际上是在尝试“将200个随机数添加到从0到100的集合中”。从概念上讲这是错误的,因为不可能从0到100的范围内得到200个唯一的随机数。在这个范围内最多只能得到100个唯一的随机数。你知道吗
代码的另一个问题是在每次迭代中随机选择数字,而不检查之前是否添加了数字。你知道吗
因此,为了将
N
随机数从0到M
的范围内取出来,您必须执行以下操作:上述方法适用于小范围。如果您期望
M
是一个大的数字,那么生成一个大的random_candidates
数组并不是非常有效的内存。你知道吗在这种情况下,最好在循环中随机生成一个数字,直到找到之前没有选择的数字:
这将创建一个始终包含100个元素的集合(给定输入范围等于或大于100)。你知道吗
正如注释所说,集合不能包含重复的数字,因此需要执行while循环,直到获得集合中所需的元素数。你知道吗
然后加一个随机数
相关问题 更多 >
编程相关推荐