根据索引列表从列表中删除项目

Remove items from list according to a list of indexes

我有一个这样的项目列表:

A = [[0 A B],[1 C D],[2 E F],[3 G H],[4 I L],[5 M N],[6 O P],[7 Q R],[8 S T],[9 U Z]]

然后我像这样定义另一个列表:

index = [0,2,6]

我的目标是从 A 中删除列表 1、3 和 7,结果是:

A = [[1 C D],[3 G H],[4 I L],[5 M N],[7 Q R],[8 S T],[9 U Z]]

删除此类项目的最明智方法是什么?如果可能的话,我想在不使用 for 循环的情况下实现它。

我尝试使用以下代码,但显然它不起作用,因为每次迭代都会影响 A 的大小

for j in index:
    del A[j]

我的简单技巧是从头到尾删除它们,所以删除的位置不受影响

for j in sorted(index, reverse=True):
    del A[j]

可能最实用(和 Pythonic)的方法是创建一个 new 列表,省略原始列表中那些索引处的元素:

def remove_by_indices(iter, idxs):
    return [e for i, e in enumerate(iter) if i not in idxs]

查看实际效果 here

使用列表理解和enumerate创建新列表:

A = [['0 A B'],['1 C D'],['2 E F'],['3 G H'],['4 I L'],['5 M N'],['6 O P'],['7 Q R'],['8 S T'],['9 U Z']]

print([element for index, element in enumerate(A) if index not in (0, 2, 6)])
>> [['1 C D'], ['3 G H'], ['4 I L'], ['5 M N'], ['7 Q R'], ['8 S T'], ['9 U Z']]

或者,使用列表推导式创建一个具有所需属性的新列表,然后立即替换旧列表。

A = [i for i in A if i[0] not in [0, 2, 6]]