Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速获取数字列表的方法_Python - Fatal编程技术网

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)