Учитывая два входных списка, как я могу создать список элементов, которые являются общими для обоих входных данных?
Например: для входных данных [1,2,3,4,5,6] и [3,5,7,9] результат должен быть [3, 5]; для входных данных ['this','this','n','that'] и ['this','not','that','that'] результат должен быть ['this', 'that'].
Решения, предложенные S.Mark и SilentGhost, в целом рассказывают вам, как это должно быть сделано питоновским способом, но я подумал, что вам также может быть полезно узнать, почему ваше решение не работает. Проблема в том, что как только вы находите первый общий элемент в двух списках, вы возвращаете только этот единственный элемент. Ваше решение можно исправить, создав result список и собрав общие элементы в этом списке:
defcommon_elements(list1, list2): result = [] for element in list1: if element in list2: result.append(element) return result
Еще более короткая версия, использующая понимание списков:
defcommon_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))