Вопрос-Ответ

Common elements comparison between 2 lists

Сравнение общих элементов между двумя списками

Учитывая два входных списка, как я могу создать список элементов, которые являются общими для обоих входных данных?

Например: для входных данных [1,2,3,4,5,6] и [3,5,7,9] результат должен быть [3, 5]; для входных данных ['this','this','n','that'] и ['this','not','that','that'] результат должен быть ['this', 'that'].



Смотрите также:



Переведено автоматически
Ответ 1

Используйте set intersection в Python:

>>> list1 = [1,2,3,4,5,6]
>>> list2 = [3, 5, 7, 9]
>>> list(set(list1).intersection(list2))
[3, 5]
Ответ 2

Решения, предложенные S.Mark и SilentGhost, в целом рассказывают вам, как это должно быть сделано питоновским способом, но я подумал, что вам также может быть полезно узнать, почему ваше решение не работает. Проблема в том, что как только вы находите первый общий элемент в двух списках, вы возвращаете только этот единственный элемент. Ваше решение можно исправить, создав result список и собрав общие элементы в этом списке:

def common_elements(list1, list2):
result = []
for element in list1:
if element in list2:
result.append(element)
return result

Еще более короткая версия, использующая понимание списков:

def common_elements(list1, list2):
return [element for element in list1 if element in list2]

Однако, как я уже сказал, это очень неэффективный способ сделать это - встроенные в Python типы наборов намного эффективнее, поскольку они реализованы на C внутренне.

Ответ 3

Вы также можете использовать наборы и получить общие черты в одной строке: вычтите набор, содержащий различия, из одного из наборов.

A = [1,2,3,4]
B = [2,4,7,8]
commonalities = set(A) - (set(A) - set(B))
Ответ 4

Вы можете решить это с помощью numpy:

import numpy as np

list1 = [1, 2, 3, 4, 5, 6]
list2 = [3, 5, 7, 9]

common_elements = np.intersect1d(list1, list2)
print(common_elements)

common_elements будет массив numpy: [3 5].

2023-12-17 20:50 python list