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

时间:2018-05-22 19:11:17

标签: python python-3.x list

我在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元素的索引。我想删除W给定A的元素。因此,在示例中,我想删除W[0][0]W[1][0]W[1][1]W[2][0]W[2][1]W[2][2]等。< / p>

我做的是:

for t in range(len(A)):
    del W[t][A[t]]

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

2 个答案:

答案 0 :(得分: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], []]

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

import numpy as np

res = [np.delete(i, j).tolist() for i, j in zip(W, A)]

答案 1 :(得分:2)

一种简单的方法是使用两个嵌套循环。正如您现在可能已经注意到的那样,您需要两个索引号 - 一个用于A中的列表,另一个用于此列表的元素号。这是解决问题的一种方法:

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

#cycle through list A and keep track of the list number i
for i, a_list in enumerate(A):
    #retrieve index from each list in A, start with the highest index to avoid index problems
    for j in sorted(a_list, reverse = True):
        #delete the element j in list i of W
        del W[i][j]

print(W)
#output
#[[2], [3], [3], [4, 4], []]