使用列表理解就地更新列表:
for sublist in B:
if sublist[0] in A:
sublist[1:] = [v for v in sublist[1:] if v not in A]
j
在你的循環只是另一個參考子表的值。 del j
刪除那個引用,但該列表仍包含該引用。您可以使用del listobj[index]
或listobj.pop(value)
(請注意這些內容中的細節)從列表中刪除值,但在迭代時從列表中刪除將導致跳過項目,如果您不小心。
通過分配給一個切片,您可以在就地替換列表中的這些元素。
請注意,您可能想要製作A
a 集合;會員測試是遠遠快使用一組時:
Aset = set(A)
for sublist in B:
if sublist[0] in Aset:
sublist[1:] = [v for v in sublist[1:] if v not in Aset]
演示:
>>> A = ['x', 'y', 'z']
>>> B = [['x', 'a', 'b', 'c'], ['y', 'c'], ['x', 'a', 'c', 'z']]
>>> Aset = set(A)
>>> for sublist in B:
... if sublist[0] in Aset:
... sublist[1:] = [v for v in sublist[1:] if v not in Aset]
...
>>> B
[['x', 'a', 'b', 'c'], ['y', 'c'], ['x', 'a', 'c']]
爲什麼跳過'i'中的第0個元素? – IanAuld
@IanAuld:來自問題:*並且它不在該嵌套列表的第一個位置* –
您可以添加預期的輸出嗎?我並不完全明白,如果它不在嵌套列表的第一個位置,你似乎忽略了Martjin答案中的所有第一個元素 –