寻找一种更短的方式来执行多个随机数分配

时间:2016-05-15 18:26:42

标签: python random

我正在尝试完成一个挑战,我必须生成两个随机数列表,然后将列表共有的数字拉到另一个没有重复的列表中。我有一些有用的东西,但我觉得它可能更短。有没有更好的方法将随机范围分配给列表z和y?是否有列表理解可行?

cf push

4 个答案:

答案 0 :(得分:3)

我会使用random.sample,并使用随机整数指定要采样的数字:

y = random.sample(range(1, 1001), random.randint(1, 100))
z = random.sample(range(1, 1001), random.randint(1, 100))
set(y) & set(z)
Out[35]: {51, 585, 968}

正如@Alan所说:对于Python 2,最好使用xrange而不是range作为范围返回列表。对于范围(1000),这可能不是问题,但对于更大的范围,它可能导致内存问题。您还应该注意random.sample选择不替换。如果你想选择替换(所以数字可以重复),你可以使用列表推导为@DeepSpace did(当然你不想将它转换成一个集合,所以使用[]而不是{在那种情况下)。

答案 1 :(得分:1)

Python不是Java或C.您不需要首先声明列表,然后将每个元素初始化为新对象。

您的整个代码可以重构为:

set_a = {random.randint(1,1000) for _ in range(random.randint(1,1000))}
set_b = {random.randint(1,1000) for _ in range(random.randint(1,1000))}

common_list = set_a & set_b

答案 2 :(得分:0)

你正在寻找这个吗? [random.randint(1,1000)for i in range(100)]

答案 3 :(得分:0)

您可以使用list comprehensions

import random
from random import randrange

z = [random.randint(1,1000) for x in range(100)]
y = [random.randint(1,1000) for x in range(100)]

c = set(y) & set(z)
print(c)