如何在python中打印100个随机的“集合”数字并添加到空集合()中

2024-09-29 03:29:24 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在python中打印“set”的100个随机数,意味着我必须从给定的范围中提取100个随机数并将其添加到一个空集()。我需要用Python来解决这个问题。我试过用下面的方法,但它并没有精确到100个数字。你知道吗

import random
s=set()
for i in range(200):
    s.add((random.randint(0,101)))
print(s)
print(len(s))

Tags: 方法inimportaddforlenrange数字
3条回答

set()只能包含唯一项。如果您尝试向set()添加一个已经存在的项,它将被忽略:

>>> s = set()
>>> s.add(1)
>>> s
{1}
>>> s.add(1)
>>> s
{1}

在原始代码中,您实际上是在尝试“将200个随机数添加到从0到100的集合中”。从概念上讲这是错误的,因为不可能从0到100的范围内得到200个唯一的随机数。在这个范围内最多只能得到100个唯一的随机数。你知道吗

代码的另一个问题是在每次迭代中随机选择数字,而不检查之前是否添加了数字。你知道吗

因此,为了将N随机数从0到M的范围内取出来,您必须执行以下操作:

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)

上述方法适用于小范围。如果您期望M是一个大的数字,那么生成一个大的random_candidates数组并不是非常有效的内存。你知道吗

在这种情况下,最好在循环中随机生成一个数字,直到找到之前没有选择的数字:

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)

这将创建一个始终包含100个元素的集合(给定输入范围等于或大于100)。你知道吗

import random
set(random.sample(range(1337), 100))

正如注释所说,集合不能包含重复的数字,因此需要执行while循环,直到获得集合中所需的元素数。你知道吗

然后加一个随机数

import random
s=set()
while len(s) < 100:
    s.add((random.randint(0,200)))
print(s)
print(len(s))

相关问题 更多 >