这个问题是双重的。首先,根据我的理解,从一个给定的列表中统一删除10%的想法如下所示。(1):计算10% *元素个数(2):随机均匀地逐个删除元素,直至列表中元素个数最多为90% *元素个数,即:
while (the current number of elements is bigger than 90% * totul number of elements)
randomly and uniformly generate an element from the current list and remove it.以上是正确的吗?这听起来是不是更像没有替换的东西?或者有没有什么内置的python函数可以使用。其次,通过这个链接,Very fast sampling from a set with fixed number of elements in python我得到了一个想法,即从python中删除列表中的元素是代价高昂的。那么,有没有更好的方法来解决这个问题呢?非常感谢。
发布于 2015-03-11 06:48:51
看起来random.sample是个不错的选择。
n_elements = int(len(elements) * 0.9)
randomly_selected = random.sample(elements, n_elements)这可以通过创建一个新的列表来解决“从python中的列表中删除元素代价很高”的问题。
发布于 2015-03-11 07:09:13
我这样做的方法是:获取列表的90%有多大,对列表进行random.shuffle,然后通过n从头开始重新分配列表(列表的90%)。
n = int(len(elements) * 0.9)
random.shuffle(elements)
elements = elements[:n]https://stackoverflow.com/questions/28975484
复制相似问题