快速统一删除给定python列表中所有元素的10%的方法

时间:2015-03-10 22:45:18

标签: python

这个问题是双重的。首先,根据我的理解,从给定列表中统一删除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中删除列表中的元素代价很高。那么,有没有更好的方法来解决这个问题?非常感谢。

2 个答案:

答案 0 :(得分:2)

似乎random.sample将成为可行的方式......

n_elements = int(len(elements) * 0.9)
randomly_selected = random.sample(elements, n_elements)

通过创建一个新列表来解决“从python列表中删除元素代价高昂”的问题。

答案 1 :(得分:2)

我这样做是为了获得列表中90%的大小,random.shuffle列表,然后从头开始重新分配列表n(列表的90%)。

n = int(len(elements) * 0.9)
random.shuffle(elements)
elements = elements[:n]