python-3.x 范围函数的非预期结果,略微混淆

wpx232ag  于 2023-03-13  发布在  Python
关注(0)|答案(2)|浏览(143)

我是Python新手,所以如果这看起来很傻,我道歉,但是,我试图用for循环和range函数从列表中移除某些索引,但是范围不是增加1,而是增加2,即使我没有传递任何额外的参数。
下面是我的尝试:

def remove_middle(lst,start,end):
  for i in range(start,(end+1)) :
    lst.pop(i)
  return lst

print(remove_middle([4, 8, 15, 16, 23, 42], 1, 3))

我以为是[4, 23, 42]
但接收到[4, 15, 23]

eoxn13cs

eoxn13cs1#

下面是一个使用列表解析的实现:

def remove_middle(lst, start, end):
    return [lst[i] for i in range(len(lst)) if i < start or i > end]

也可以合并两个切片:

def remove_middle(lst, start, end):
    return lst[:start] + lst[end+1:]
polkgigr

polkgigr2#

迭代时不应从列表中删除元素,而可以:

def remove_middle(lst,start,end):
    k=[]
    for x,y in enumerate(lst):
        if x<start or x>end:
            k.append(y)
    return k 

print(remove_middle([4, 8, 15, 16, 23, 42],1,3))
#output [4, 23, 42]

相关问题