我使用pymongo转储 MongoDB 中的集合列表。列表长度大于10000,大约12000或更长(列表长度不是一定的数字)。
但是,我只需要 10000 个列表实例。我知道列表'l'可以按l[:10000]
or切片l[len(l)-10000:]
。但我认为删除列表中项目的随机方式可能会更好。
所以我想知道如何删除列表中的随机项目以使其长度减少到 10000 长?谢谢。
先打乱列表,然后切片:
from random import shuffle
shuffle(your_lis)
your_lis = your_lis[:10000]
如果订单很重要:
from random import randrange
diff = len(your_lis) - 10000
for _ in xrange(diff):
ind = randrange(len(your_lis))
your_lis.pop(ind) #a quick timing check suggests that `pop` is faster than `del`
如果要保持顺序,可以删除随机索引,例如:
def remove_random(l, count):
for i in range(count):
index = random.randint(0, len(l) - 1)
del l[index]
count
此功能将从 list 中删除最多项目l
。
这是另一种方式:
from random import random
def chop(the_list, length):
while len(the_list) > length:
del the_list[int(random()*length)]
# usage
chop(your_list, 10000)
使用 numpy 非常简单(为了便于阅读,只提取了 4 个项目):
>>> import numpy as np
>>> l = range(0, 12000)
>>> np.random.choice(np.asarray(l), 4, false)
def random_reduce(list, count):
length = len(l)
for i in range(count):
index = random.randint(0, length - 1)
del list[index]
length = length - 1
import random
subsample=random.sample(population,k)