Python 如何删除基于索引的列表部分
在下面的列表中Python 如何删除基于索引的列表部分,python,list,Python,List,在下面的列表中 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 我想删除列表的下半部分,11-15 然而,当我尝试下面的代码时,即使索引似乎正确,我的原始列表中仍然有错误的部分 x = list(range(11,21)) print(x) #[11, 12, 13, 14, 15, 16, 17, 18, 19, 20] i = list(range(0,(int(len(x)/2)))) #[0, 1, 2, 3, 4] for n in i:
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
我想删除列表的下半部分,11-15
然而,当我尝试下面的代码时,即使索引似乎正确,我的原始列表中仍然有错误的部分
x = list(range(11,21))
print(x) #[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
i = list(range(0,(int(len(x)/2)))) #[0, 1, 2, 3, 4]
for n in i:
print(x[n]) #Correctly prints 11-15
for n in i:
del x[n]
print(x) #[12, 14, 16, 18, 20]
如何修改此项,以便在不考虑索引大小的情况下删除列表的前半部分?删除x[n]时,会移动列表的所有索引,这意味着您访问了错误的元素。最好只制作索引以删除一个集合,然后过滤整个范围:
i_set=seti
过滤的\u x=[x[n]如果n不在i\u集中,则n在ranglenx中]
或者,如果要删除连续块,则只需对列表进行切片:
过滤的_x=x[lenx//2:]
删除x[n]时,会移动列表中的所有索引,这意味着您访问了错误的元素。最好只制作索引以删除一个集合,然后过滤整个范围:
i_set=seti
过滤的\u x=[x[n]如果n不在i\u集中,则n在ranglenx中]
或者,如果要删除连续块,则只需对列表进行切片:
过滤的_x=x[lenx//2:]
您不应该在迭代列表时修改它,因为索引指向的元素将发生更改 IMHO,删除一半列表的最简单方法是将其切掉,并将结果列表分配回x:
您不应该在迭代列表时修改它,因为索引指向的元素将发生更改 IMHO,删除一半列表的最简单方法是将其切掉,并将结果列表分配回x:
此代码用于更好地理解代码中发生的情况:
x = list(range(11,21))
print(x) #[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
i = list(range(0,(int(len(x)/2)))) #[0, 1, 2, 3, 4]
for n in i:
print("Before del: ", x[n])
del x[n]
print("All list: ", x)
print("After del: ", x[n])
print("-----------------")
print(x) #[12, 14, 16, 18, 20]
此代码用于更好地理解代码中发生的情况:
x = list(range(11,21))
print(x) #[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
i = list(range(0,(int(len(x)/2)))) #[0, 1, 2, 3, 4]
for n in i:
print("Before del: ", x[n])
del x[n]
print("All list: ", x)
print("After del: ", x[n])
print("-----------------")
print(x) #[12, 14, 16, 18, 20]
x=x[lenx//2:]?这是否回答了您的问题?x=x[lenx//2:]?这是否回答了您的问题?