Есть несколько вещей, которые я бы сделал по-другому (поскольку вы спрашиваете о написании чистого кода, я обращаюсь к этому, а не только к функциональной точности). Как правило, при работе над проблемой, которая имеет различные проблемы, часто полезно разделять эти проблемы. В этом случае я не уверен, почему вы захотите управлять всеми 3 проблемами в пределах одной l oop. В программном обеспечении вы часто обнаруживаете, что одна проблема развивается с другой скоростью, чем другие проблемы. Кроме того, удаление элемента во время итерации по списку, как правило, не очень хорошая идея. Я бы использовал что-то вроде следующего:
def update_cheesy(name):
if name == 'mozzarella':
return name.upper()
return name
def update_person(name):
if name == 'cinderella':
return name.capitelize()
return name
names[:] = [update_person(name) for name in names]
print(names)
names[:] = [update_cheesy(name) for name in names]
print(names)
names[:] = [name for name in names if name != 'salmonella']
print(names)
Обратите внимание, что присваивание выполняется именам [:], а не именам. Это заменяет содержимое списка, а не просто устанавливает именованную ссылку на другой список.
Вы можете объединить все модификации в одном вызове, если считаете, что это чище.