如何从列表中删除索引列表

zdm*_*zdm 4 python list python-3.x

我在Python 3中有两个相同长度的列表列表如下:

A = [[0], [0, 1], [0, 1, 2], [0, 1], [0, 1, 2, 3]]
W = [[2, 2], [1, 2, 3], [2, 2, 2, 3], [1, 3, 4, 4], [1, 1, 3, 4]]
Run Code Online (Sandbox Code Playgroud)

元素A是元素的索引W.我想删除W给定的元素A.所以,在这个例子中,我想删除W[0][0],W[1][0],W[1][1],W[2][0],W[2][1],W[2][2],等.

我做的是这样的:

for t in range(len(A)):
    del W[t][A[t]]
Run Code Online (Sandbox Code Playgroud)

但是这会产生以下错误: TypeError: list indices must be integers or slices, not list

jpp*_*jpp 5

numpy数组不同,您无法使用列表索引列表.但您可以使用列表推导来完成此任务:

A = [[0], [0, 1], [0, 1, 2], [0, 1], [0, 1, 2, 3]]
W = [[2, 2], [1, 2, 3], [2, 2, 2, 3], [1, 3, 4, 4], [1, 1, 3, 4]]

res = [[j for i, j in enumerate(w) if i not in a] for a, w in zip(A, W)]

print(res)

[[2], [3], [3], [4, 4], []]
Run Code Online (Sandbox Code Playgroud)

或者,如果您对使用第三方库感到满意,则numpy语法更简单:

import numpy as np

res = [np.delete(i, j).tolist() for i, j in zip(W, A)]
Run Code Online (Sandbox Code Playgroud)