2012-02-16 23 views
0

我有兩個數字列表。在每個數字[1,2,3,4],但在一個是有額外的第五個數字,例如。刪除lis中沒有出現在另一個列表中的數字 - Haskell

list1 = [1,2,3,4] 

list2 = [1,2,3,4,5] 

我需要強制執行list2相同list1,通過無論是從list2除去第五號碼或與另一list1副本替換list2

可以這樣做嗎?

+0

爲什麼你需要確保'list2'與'list1'相同?你不能只用'list1'嗎?我懷疑你的問題還有其他限制,爲了幫助你,我們需要知道這些限制。 – 2012-02-17 12:29:04

回答

2
[ x | x <- list1, x `elem` list2 ] 
8

這個問題有點奇怪。如果你想要改變其中一個列表,那麼答案是否定的:這是不可能的。否則,您當然可以在任何需要的地方使用list1而不是list2

4

Data.List提供了intersect方法,這看起來正是要求的。

+0

如果你出於某種原因擔心效率(而不關心保存順序或重複),那麼你可以使用'Data.Set.fromList'和'Data.Set.intersection' – 2012-02-16 23:16:36

3

最容易和高性能的方法來強制執行list2相同list1是說

let list2 = list1 in ....... 

這甚至不要求列表中的元素是相當的。

0

和這裏的,雖然我很喜歡Louis_Wasserman的解決方案另一個最

filter (`elem` [1..4]) [1..12] 
>>> [1,2,3,4] 

filter (flip elem [1..4]) [1..12] 
>>> [1,2,3,4] 
fliter (\x ->x `elem` [1..4]) [1..12] 
>>> [1,2,3,4] 

如果列表中有兩個是不相關的,爲什麼你在第一時間使用它? 和另一個來到我的腦海:

const [1..4] list2 
>>> [1,2,3,4] 

最後一個只是忽略第二個列表,並在第一罷了。

相關問題