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:]?这是否回答了您的问题?