从Python子列表中删除元素

4

我有两个列表A1J1,它们包含许多子列表。从A1[0]的每个子列表中,我想要删除在J1[0]中指定的元素。下面是当前输出和期望输出。

A1 = [[[1, 3, 4, 6], [0, 2, 3, 5]], [[1, 3, 4, 6], [1, 3, 4, 6]]]

J1 = [[[1], [2]], [[1], [4]]]

arD = []


for i in range(0,len(A1)):
    for j in range(0,len(J1)):
        C=set(A1[i][j])-set(J1[i][j])
        D=list(C)
        arD.append(D)
        D=list(arD)
print("D =",D)

当前输出为

D = [[3, 4, 6], [0, 3, 5], [3, 4, 6], [1, 3, 6]]

期望的输出是

D = [[[3, 4, 6], [0, 3, 5]],[[3, 4, 6],[1, 3, 6]]]
5个回答

2

代码:

A1 = [[[1, 3, 4, 6], [0, 2, 3, 5]], [[1, 3, 4, 6], [1, 3, 4, 6]]]

J1 = [[[1], [2]], [[1], [4]]]

arD=[]

for i in range(0,len(A1)):
    tmp=[]                 #Created a tmp variable list
    for j in range(0,len(J1)):
        C=set(A1[i][j])-set(J1[i][j])
        tmp.append(list(C))    #Appending result in tmp variable
    arD.append(tmp)            #Storing tmp list as a list of lists in arD.
print("D =",arD)

输出:

D = [[[3, 4, 6], [0, 3, 5]], [[3, 4, 6], [1, 3, 6]]]

1

使用列表推导式:

print([[[num for num in subsub_A1 if num not in subsub_J1]
        for subsub_A1, subsub_J1 in zip(sub_A1, sub_J1)]
       for sub_A1, sub_J1 in zip(A1, J1)])

输出:

[[[3, 4, 6], [0, 3, 5]], [[3, 4, 6], [1, 3, 6]]]

1
如果你的列表深度是任意的,考虑使用递归函数:
def cleanup(A, J):
    for l1, l2 in zip(A, J):
        if l1 and isinstance(l1[0], list):
            cleanup(l1, l2)
        else:
            s = set(l2)
            l1[:] = [x for x in l1 if x not in s]

cleanup(A1, J1) # operation is in place
print(A1)

输出: [[[3, 4, 6], [0, 3, 5]], [[3, 4, 6], [1, 3, 6]]]


1
尝试使用remove方法,如果您不介意破坏原始数据:
from contextlib import suppress

A1 = [[[1, 3, 4, 6], [0, 2, 3, 5]], [[1, 3, 4, 6], [1, 3, 4, 6]]]
J1 = [[[1], [2]], [[1], [4]]]

for A, J in zip(A1, J1):
    for a, j in zip(A, J):
        for x in j:
            with suppress(ValueError):
                a.remove(x)
print(f"RESULT: {A1}")

输出结果:RESULT: [[[3, 4, 6], [0, 3, 5]], [[3, 4, 6], [1, 3, 6]]]


0

使用列表推导式

[[list(set(A1[i][j])-set(J1[i][j])) for j in range(0,len(J1))] for i in range(0,len(A1))]

#output

[[[3, 4, 6], [0, 3, 5]], [[3, 4, 6], [1, 3, 6]]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接