Допустим, у меня есть следующий список списков:
list1 = [[A,B],[C,D],[E, F]]
list2 = [A, B, F]
Я хочу, чтобы функция возвращала общий список по отношению к первому. Ожидаемый результат этого примера будет:
result = [[A,B],[],[F]]
Я уже пытался перебрать каждый элемент list1 и, сравнивая со списком list2, создать новый массив, добавляющий каждый элемент. Я знаю, как перебирать список списков, но я не нахожу способ создать список списков для «результата».
Списки не большие, около 5 элементов. Существует возможность повторения элементов, но порядок в списках, внутри всего списка, не важен.
4 ответа
Это один из подходов. Используя list comprehension
Пример:
list1 = [["A","B"],["C","D"],["E", "F"]]
list2 = ["A", "B", "F"]
result = [[j for j in i if j in list2] for i in list1]
print(result)
Вывод:
[['A', 'B'], [], ['F']]
С набором арифметики, чрезвычайно легко и быстро:
set2 = set(list2)
[list(set(e) & set2) for e in list1]
Если списки могут содержать неуникальные элементы, тогда ... давайте использовать счетчики!
from collections import Counter
counter2 = Counter(list2)
[list((Counter(e) & counter2).elements()) for e in list1]
Используйте set
и intersection
In [18]: [list(set(item).intersection(list2)) for item in list1]
Out[18]: [['A', 'B'], [], ['F']]
Переберите список и найдите пересечение с базовым списком.
Или используйте list comprehension
,
In [16]: [[i for i in item if i in list2]for item in list1]
Out[16]: [['A', 'B'], [], ['F']]
listA = [['A','B'],['C','D'],['E', 'F']]
listB = ['A', 'B', 'F']
listOut = []
for item in listA:
temp = []
for inner in item:
for b in listB:
if inner == b:
temp.append(b)
listOut.append(temp)
print(listOut)
Это делает то, о чем вы просили.
Похожие вопросы
Новые вопросы
python
Python - это мультипарадигмальный динамически типизированный многоцелевой язык программирования, разработанный для быстрого (для изучения, использования и понимания) и для обеспечения чистого и унифицированного синтаксиса. Обычно используются две похожие, но несовместимые версии Python, Python 2.7 и 3.x. Для специфичных для версии вопросов Python добавьте тег [python-2.7] или [python-3.x]. При использовании варианта или библиотеки Python (например, Jython, PyPy, Pandas, Numpy), пожалуйста, включите их в теги.