Python: удаление записей из упорядоченного списка, которых нет в неупорядоченном списке - PullRequest
4 голосов
/ 12 февраля 2012

У меня есть два списка:

ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']

Теперь я хочу удалить все записи из упорядоченного списка, которых нет в неупорядоченном списке при сохранении порядка.

Как я могусделать это?

Ответы [ 3 ]

9 голосов
/ 12 февраля 2012
ordered = [item for item in ordered if item in unordered]

Этот метод создает новый список, основанный на старых, используя понимание списка Python.

Для больших объемов данных сначала следует превратить список неупорядоченный в набор, каклюди, предложенные в комментариях, имеют огромное значение в производительности, например:

unordered = set(unordered)

Эталон!

заказано : 5000 предметов, неупорядоченный : 1000 элементов
0,09561 с без набора
0,00042 с с набором

Для 10/2 элементов время практически одинаковое, поэтому всегда полезно использоватьустановить независимо от размера данных.

2 голосов
/ 12 февраля 2012

Лучше использовать набор для тестирования членства, например:

ordered = ['salat', 'baguette', 'burger', 'pizza']
unordered = ['pizza', 'burger']

unord = set(unordered)
ordered = [e for e in ordered if e in unord]
0 голосов
/ 12 февраля 2012

Примерно так:

ordered = list(filter(lambda x: x not in unordered, ordered))

Функция list не нужна при использовании Python <3. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...