Python 快速获取数字列表的方法
所以我有一段代码:Python 快速获取数字列表的方法,python,Python,所以我有一段代码: def test(num): count = 1 l = [] while len(l) < 16: x = num % count if x >= 16 or x in l: pass else: l.append(x) count += 1 return l 这一切都是可行的,但对于更大的
def test(num):
count = 1
l = []
while len(l) < 16:
x = num % count
if x >= 16 or x in l:
pass
else:
l.append(x)
count += 1
return l
这一切都是可行的,但对于更大的列表和许多不同的数字,它变得相当缓慢。我想知道是否有任何方法可以让这更快,或者另一种方法可以得到一个从0到15的数字列表。“随机”数字越多越好。提前谢谢 如果您只是在寻找随机数,那么您可以使用具有此功能的库。例如,或者像很多人已经建议的那样,使用
random
。它不是真正的随机函数(什么都不是)——如果您使用相同的种子调用random.seed
,然后进行相同的伪随机函数调用,您将始终得到相同的伪随机结果
>>> import random
>>> def shuffled_ints(n, seed):
... random.seed(seed)
... ints = list(range(n))
... random.shuffle(ints)
... return ints
...
>>> shuffled_ints(16, 45071)
[0, 10, 12, 14, 8, 1, 15, 2, 13, 7, 6, 5, 3, 9, 11, 4]
>>> shuffled_ints(16, 1234)
[3, 2, 6, 4, 7, 10, 8, 5, 11, 12, 13, 9, 15, 0, 1, 14]
>>> shuffled_ints(16, 45071)
[0, 10, 12, 14, 8, 1, 15, 2, 13, 7, 6, 5, 3, 9, 11, 4]
使用shuffle
(或等效方法)比原始方法更有效,因为您不需要不断生成随机数并将其丢弃
更简洁的版本可能是使用random.sample
:
def shuffled_ints(n, seed):
random.seed(seed)
return random.sample(range(n), n)
元素中最大的列表有多大?等等,你想要一个介于0和15之间的随机数列表吗?@Iarsks是的,只有0-15,但不是完全随机的。为什么不使用模块呢?使用生成器并不能解决这里的基本算法问题,也就是说,当你真的只想要16个伪随机数时,你正在仔细研究一个无限多的伪随机数再说一遍,我不想要一个完全随机的数字列表。
seed
做什么?它做的正是你的问题所要求的。
def shuffled_ints(n, seed):
random.seed(seed)
return random.sample(range(n), n)