2013-02-12 3 views
-2

Учитывая список объектов, где каждый имеет свойство с именем x, и я хочу удалить все объекты, свойство x содержит значение v из списка.Удалить элемент с определенным значением свойства из списка

Один способ сделать это, чтобы использовать список: [item for item in mylist if item.x != v], но так как мой список небольшой (обычно менее 10). Другой способ - перебрать список в цикле и проверить каждый отдельный элемент.

Есть ли третий способ, который быстрей или даже быстрее?

+0

Если список невелик, вы не должны заботиться о скорости вообще. Напишите все, что более читаемо. –

+0

оба способа, которые вы описали, функционально идентичны. зачем вам нужен третий способ? Кроме того, если ваш список невелик, нет практических оснований для его ускорения. – ozk

+0

Опция «итерации и удаления», как правило, является ужасной идеей, так как вам нужно либо перебирать по индексу (громоздко, медленно и уродливо), либо использовать 'list.remove (value)', что означает, что вы будете перебирать по списку для каждого значения, значительно увеличивая сложность того, что вы делаете. Лучшим решением здесь является понимание списка (или выражение генератора). –

ответ

1

Вы также можете использовать генератор или функцию filter. Выберите то, что вы найдете наиболее читаемым; эффективность на данный момент не имеет значения (особенно если вы имеете дело с несколькими элементами).

1

Создайте новый список, используя синтаксис понимания списка. Я не думаю, что вы можете сделать что-нибудь быстрее, чем это. Не имеет значения, что ваш список небольшой, это даже лучше.

Смежные вопросы