如何在python中删除列表的成员

Wes*_*est -1 python set

我有以下代码从data列表中删除所有子列表的子nums集.我不明白为什么它不工作:

data=[[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
nums=[1,2]

for each in data:
    if set(nums).issubset(each):
        data.remove(each)

print(data)
>>[[1, 2, 4], [1, 3, 4], [2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)

当nums是其子集时,为什么不删除[1,2,4],如下所示?

set(nums).issubset([1,2,4])
>>True
Run Code Online (Sandbox Code Playgroud)

rau*_*ila 9

你正在修改你正在迭代的列表.

这是一个更好的解决方案:

data=[[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
nums=[1,2]

data = [each for each in data if not set(nums).issubset(each)]
print(data)
Run Code Online (Sandbox Code Playgroud)

出于学习目的,请参阅此代码也可以使用.与您的代码的不同之处在于,我们不会datafor循环中修改列表.

data=[[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
nums=[1,2]

new_data = []
for each in data:
    if not set(nums).issubset(each):
        new_data.append(each)

data = new_data
print(data)
Run Code Online (Sandbox Code Playgroud)