Когда я пишу код на Python, мне часто нужно удалять элементы из списка или другого типа последовательности, основанные на некоторых критериях. Я не нашел решение, которое является элегантным и эффективным, поскольку удаление элементов из списка, который вы сейчас просматриваете, плохо. Например, вы не можете этого сделать:
for name in names:
if name[-5:] == 'Smith':
names.remove(name)
Обычно я делаю что-то вроде этого:
toremove = []
for name in names:
if name[-5:] == 'Smith':
toremove.append(name)
for name in toremove:
names.remove(name)
del toremove
Это неэффективно, довольно уродливо и, возможно, глючит (как он обрабатывает несколько записей "Джон Смит"?). У кого-нибудь есть более элегантное решение или, по крайней мере, более эффективное?
Как насчет того, что работает со словарями?