python数组添加元素_python-将元素添加到数组的可能性

因此,我在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的机会被选中.

实际上,我只是看到您可以执行random.sample(range(n),k).我只是以为它不可用.

编辑:我得到了上面颠倒的概率.正确的版本应为:

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 < k:

ir = random.randint(0,k-1)

res[ir] = i

return res

从0到k-1的每个元素开始都有k / k的机会被选中.第一次迭代后,k有k /(k 1)个被选择的机会,而所有其他(不仅是剩余的,而是所有)具有ak / k *((k-1)/ k * k /(k 1)1(k 1)= k /(k 1)被选中的机会.经过第二次迭代,k 1有ak /(k 2)被选中的机会,而其他所有元素都有ak /(k 1)*((k-1) / k * k /(k 2)2 /(k 2))= k /(k 2)被选中的机会.

实际上,这确实会使所有计算崩溃,从而在第m步之后为每个元素提供k /(k m)机会.

标签:python-3-x,list,random,arrays,python

来源: https://codeday.me/bug/20191111/2020231.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值