Skip to main content
 首页 » 编程设计

python之从列表中删除元素,使用另一个列表作为索引

2025年05月04日15cloudgamer

我有一个列表 primeList 和另一个列表 ls。 primeList 是一个充满整数的列表,我需要从 ls 中删除具有 primeList 中的索引的值。

例如,如果 primelist = [1, 3 , 5] 和 ls = [1, 2, 3, 4, 5, 6, 7],则索引1、3 和 5 应该从 ls 中删除,使 ls = [1, 3, 5, 7]

目前我正在尝试使用这段代码:

primeList = list(getPrimes()) 
    ls = list(ls) 
    for i in primeList: 
        del ls[i] 
    return ls 

这给了我以下错误:

Traceback (most recent call last): 
File "C:/Python34/My Scripts/NLP lab2/exec2.py", line 26, in <module> 
otherList = delPrimes(myList) 
File "C:/Python34/My Scripts/NLP lab2/exec2.py", line 18, in delPrimes 
del ls[i] 
IndexError: list assignment index out of range` 

我相信这是因为 getPrimes 是一个比 ls 更大的列表,但我不确定如何在 Python 中解决这个问题?

编辑 - 这是我当前的所有代码:

def delPrimes(*ls): 
 
def getPrimes(): 
    L = [] 
    for x in range(2, 230): 
        isPrime = True 
        for y in range(2, x): 
            if x % y == 0: 
                isPrime = False 
        if isPrime: 
            L.append(x) 
    return L 
 
primeList = list(getPrimes()) 
ls = list(ls) 
for i in primeList: 
    del ls[i] 
return ls 
 
  myList = list(range(1, 51)) 
 
  print(myList) 
  print("--" * 40) 
 
  otherList = delPrimes(myList) 
 
  print(otherList) 

作为一些功课的一部分,我们需要“用 Python 编写一个方法来删除列表中主要索引位置的项目(直到索引位置 50)。例如,它将删除索引位置 2、3、5 的项目, 7, … "我也相信我们必须使用'del'来进行删除。

编辑2:

for i in reversed(primeList): 
        if i <= len(ls): 
            del ls[i] 
        else: 
            continue 
return ls 

请您参考如下方法:

使用列表理解来避免就地改变列表:

return [v for i, v in enumerate(ls) if i not in primeList] 

您正在从列表的前面一个一个地删除元素,因此其他元素每个都向上移动一个位置。第一次删除后,其余索引将相差一个,然后相差二,依此类推:

>>> ls = [1, 2, 3, 4, 5, 6, 7] 
>>> del ls[1] 
>>> ls 
[1, 3, 4, 5, 6, 7] 
>>> ls[3] 
5 
>>> del ls[3] 
>>> ls 
[1, 3, 4, 6, 7] 
>>> ls[5] 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

您可以就地改变ls,但是您需要反向处理索引,以便您只删除尚未移动的索引:

for index_to_remove in reversed(primeList): 
    del ls[index_to_remove] 

但由于您已经制作了此处不需要的副本。