我有以下代码从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)
你正在修改你正在迭代的列表.
这是一个更好的解决方案:
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)
出于学习目的,请参阅此代码也可以使用.与您的代码的不同之处在于,我们不会data在for循环中修改列表.
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)