我试图从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)]
答案 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}}