因此,我在Python中建立了一个列表,例如,让我们说前100个整数,但是我确实需要所有100个整数,但只有一个样本可以说3.
import random
def f():
list_ = []
for i in range(100):
list_.append(i)
return list_
def g(list_,k):
return random.sample(list_, k)
print(g(f(),3))
>>>[50, 92, 6]
现在我可以避免不首先构建整个列表,而是直接构建示例,也许是通过增加将元素添加到f()中的列表的概率来进行构建
因为如果我要建立一个庞大的列表,该列表不是整数,而是一些其他对象,那么这种方法在内存和计算方面可能会很昂贵.
解决方法:
def random_no_dups_k_of_n(k, n):
res = list(range(k))
for i in range(k, n):
v = random.randint(0, i) # this is 0-i inclusive
if v == i:
ir = random.randint(0,k-1)
res[ir] = i
return res
这里发生的事情:这是一种伸缩产品.从0到k-1的每个元素开始都有k / k的机会被选中.第一次迭代后,k有1 /(k 1)个被选择的机会,而所有其他(不仅是剩余的,而是所有)具有(k-1)/ k * k /(k 1)=(k-1)/ (k 1)被选中的机会.第2次迭代后,k 1的被选择机会为(/ k 2),而其他所有的都具有(k-1)/(k 1)*(k 1)/(k 2)=(k-1 )/(k 2)被选中的机会.等等.最后,每个数字都有k / n的机会被选中.
实际上
如果觉得《python数组添加元素_python-将元素添加到数组的可能性》对你有帮助,请点赞、收藏,并留下你的观点哦!