2

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

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]
4

4 回答 4

7

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

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

在这里查看它的实际应用。

于 2016-11-21T14:10:18.760 回答
3

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

A = [i for i in A if i[0] not in [0, 2, 6]]
于 2016-11-21T14:11:18.560 回答
2

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

for j in sorted(index, reverse=True):
    del A[j]
于 2016-11-21T14:08:15.700 回答
1

使用列表推导并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']]
于 2016-11-21T14:10:41.800 回答