Это действительно легко объяснить на примере, поэтому для удаления пересечения списка изнутри я обычно делаю что-то вроде этого:
a = {1:'', 2:'', 3:'', 4:''}
exclusion = [3, 4, 5]
# have to build up a new list or the iteration breaks
toRemove = []
for var in a.iterkeys():
if var in exclusion:
toRemove.append(var)
for var in toRemove:
del a[var]
Это может показаться необычным примером, но удивительно, сколько раз мне приходилось делать что-то подобное. Делать это с сетами было бы гораздо приятнее, но я явно хочу сохранить «ценности» для диктата.
Этот метод раздражает, поскольку требует двух циклов и дополнительного массива. Есть ли более чистый и эффективный способ сделать это.