Python反复随机删除列表条目

时间:2014-07-28 14:07:00

标签: python list random indexing

我试图从Python中的列表列表中随机删除列表。它一直给我错误:

IndexError: list assignment index out of range

如果我从0删除随机整数,我不明白我在列表中的某个位置引用的方法 - > LEN(的thelist)。

我想随机删除列表的一半(前12个成员中随机删除其中6个)

for j in range(length/2):
    dynamiclength = len(sorted_population_list)
    del sorted_population_list[random.randint(0, dynamiclength)]

1 个答案:

答案 0 :(得分:2)

因为random.randint也可以返回端点值,因此当返回的值等于len(sorted_population_list)时,您将获得IndexError

修复方法是使用不包含终点的random.randrange

请注意,对于较大的列表,最好创建新列表(并在需要时将其重新分配给相同的变量),而不是使用del,因为它是O(N)操作,因此,对于每次删除,您都要执行O(N)操作。

首先,我从n长度等于列表长度的xrange中选择一个大小为def remove_items(lst, n): indices = set(random.sample(xrange(len(lst)), n)) lst[:] = [x for i, x in enumerate(lst) if i not in indices] lst = range(12) remove_items(lst, 4) print lst #[1, 3, 7, 8, 9, 10] 的随机样本,然后使用列表推导来过滤掉这些索引。

{{1}}