вот мой вопрос: Как извлечь те же элементы из двух списков одинаковой длины в другой список? Например: в двух списках [2,4,6,3,2,1,3,5]
и [7,3,3,2,8,8,9,1]
ответ должен быть [1,2,3,3]
. Обратите внимание, что порядок несуществен. Я фактически использую длину возвращаемого списка.Как извлечь те же элементы из двух списков в Haskell?
Я попытался это:
sameElem as bs = length (nub (intersect as bs))
но проблема nub
удаляет все дупликации. Результатом использования моей функции в первом примере является 3
длина [1,3,2]
вместо 4
длина [1,3,3,2]
. Есть ли решение? Спасибо.
Является ли позиция уместным здесь, как пример предполагает? Если это так, вы можете просто закрепить список в [(1,1), (3,3), (3,3), (2,2), (4,5) ...] и отбросить записи, в которых fst не является snd. –
Положение здесь не имеет отношения. Я изменил пример. Спасибо. – user3928256
Хорошо, тогда есть другое подобное решение. Заметим, что '(\ l-> \ k-> [x | x <-l, y <-k, x == y]) [2,4,6,3,2,1,3,5] [7 , 3,3,2,8,8,9,1] 'находит все совпадения, восстанавливая' [2,3,3,2,1,3,3] '. Вы можете исключить двойной подсчет, индексируя первый список и в конце выпадающие значения с повторяющимися вхождениями. –