Когда я пишу код на 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
Это неэффективно, довольно некрасиво и, возможно, содержит ошибки (как он обрабатывает несколько записей «Джон Смит»?). Есть ли у кого-нибудь более элегантное решение или хотя бы более эффективное?
Как насчет того, что работает со словарями?