Python: Как создать список с элементами, повторяющимися в двух списках - PullRequest
2 голосов
/ 08 ноября 2019

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

list_1 = ['A', 'B', 'C', 'C', 'D']
list_2 = ['C', 'C', 'F', 'A', 'G', 'D', 'C']

Я хочу создать новый список с элементами, которые находятся в двух списках. Например:

['A', 'C', 'C', 'D']

Обратите внимание, что следует учитывать, что любой элемент может повторяться в списке несколько раз и должен быть в новом списке столько раз, сколько он повторяется в обоих списках. Например, «C» повторяется 2 раза в списке list_1 и 3 раза в списке list_2, поэтому в результате он появляется 2 раза.

Классическим методом для этого будет:

import copy
result = []
list_2 = fruit_list_2.copy()
for fruit in fruit_list_1:
  if fruit in list_2:
    result.append(fruit)
    list_2.remove(fruit)

но мне интересно делать это по спискам генерации: [число для числа в числах, если число> 0]. Возможно ли это?

Ответы [ 4 ]

3 голосов
/ 08 ноября 2019

Если вас не очень беспокоит порядок нового списка, вы можете использовать collections.Counter.

>>> list((Counter(list_1) & Counter(list_2)).elements())
['A', 'C', 'C', 'D']

& принимает пересечение двух как множественные, сминимальное количество используется для общих элементов. Метод elements возвращает элементы в результате в качестве итератора, следовательно, list wrapper`.

2 голосов
/ 08 ноября 2019

читать о коллекциях. Счетчик

from collections import Counter

list_3 = list((Counter(list_1) & Counter(list_2)).elements())
1 голос
/ 08 ноября 2019

Я думаю, что это так же просто, как:

list_1 = ['A', 'B', 'C', 'C', 'D']
list_2 = ['C', 'C', 'F', 'A', 'G', 'D', 'C']

list_3 = [x for x in list_1 if x in list_2]

print(list_3)

# returns ['A', 'C', 'C', 'D']
0 голосов
/ 08 ноября 2019

Попробуйте:

[common for common in list_1 if common in list_2]

Счастливого обучения ...:)

...