gpt4 book ai didi

python - 使用python从列表中随机提取x个项目

转载 作者:太空狗 更新时间:2023-10-29 22:22:33 25 4
gpt4 key购买 nike

从两个列表开始,例如:

lstOne = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
lstTwo = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

我想让用户输入他们想要提取的项目数,作为整个列表长度的百分比,以及从每个列表中随机提取的相同索引。例如说我想要 50% 的输出是

newLstOne = ['8', '1', '3', '7', '5']
newLstTwo = ['8', '1', '3', '7', '5']

我使用以下代码实现了这一点:

from random import randrange

lstOne = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
lstTwo = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

LengthOfList = len(lstOne)
print LengthOfList

PercentageToUse = input("What Percentage Of Reads Do you want to extract? ")
RangeOfListIndices = []

HowManyIndicesToMake = (float(PercentageToUse)/100)*float(LengthOfList)
print HowManyIndicesToMake

for x in lstOne:
if len(RangeOfListIndices)==int(HowManyIndicesToMake):
break
else:
random_index = randrange(0,LengthOfList)
RangeOfListIndices.append(random_index)

print RangeOfListIndices


newlstOne = []
newlstTwo = []

for x in RangeOfListIndices:
newlstOne.append(lstOne[int(x)])
for x in RangeOfListIndices:
newlstTwo.append(lstTwo[int(x)])

print newlstOne
print newlstTwo

但我想知道是否有更有效的方法来执行此操作,在我的实际用例中,这是从 145,000 个项目中进行二次抽样。此外,randrange 在这个规模上是否充分没有偏差?

谢谢

最佳答案

Q. 我想让用户输入他们想要提取的项目数,作为总列表长度的百分比,以及从每个列表中随机提取的相同索引.

A.最直接的方法直接符合您的规范:

 percentage = float(raw_input('What percentage? '))
k = len(data) * percentage // 100
indicies = random.sample(xrange(len(data)), k)
new_list1 = [list1[i] for i in indicies]
new_list2 = [list2[i] for i in indicies]

Q. 在我的实际用例中,这是从 145,000 个项目中进行二次抽样。此外,randrange 在此尺度上是否充分没有偏差?

A. 在 Python 2 和 Python 3 中,random.randrange() 函数完全消除了偏差(它使用内部的 _randbelow() 进行多项随机选择直到找到无偏差结果的方法。

在 Python 2 中,random.sample() 函数略有偏差,但仅在最后 53 位的舍入中。在 Python 3 中,random.sample() 函数使用内部 _randbelow() 方法并且没有偏差。

关于python - 使用python从列表中随机提取x个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23459244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com