我在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]]
A的元素是W的元素的索引.我想删除给定A的W的元素.因此,在示例中,我想删除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]]
但是这会产生以下错误:TypeError:list indices必须是整数或切片,而不是list
解决方法:
与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], []]
或者,如果您对使用第三方库感到满意,那么numpy语法更简单:
import numpy as np
res = [np.delete(i, j).tolist() for i, j in zip(W, A)]
标签:python,python-3-x,list