我有兩個數字列表。在每個數字[1,2,3,4]
,但在一個是有額外的第五個數字,例如。刪除lis中沒有出現在另一個列表中的數字 - Haskell
list1 = [1,2,3,4]
list2 = [1,2,3,4,5]
我需要強制執行list2
相同list1
,通過無論是從list2
除去第五號碼或與另一list1
副本替換list2
?
可以這樣做嗎?
我有兩個數字列表。在每個數字[1,2,3,4]
,但在一個是有額外的第五個數字,例如。刪除lis中沒有出現在另一個列表中的數字 - Haskell
list1 = [1,2,3,4]
list2 = [1,2,3,4,5]
我需要強制執行list2
相同list1
,通過無論是從list2
除去第五號碼或與另一list1
副本替換list2
?
可以這樣做嗎?
[ x | x <- list1, x `elem` list2 ]
這個問題有點奇怪。如果你想要改變其中一個列表,那麼答案是否定的:這是不可能的。否則,您當然可以在任何需要的地方使用list1
而不是list2
。
Data.List
提供了intersect
方法,這看起來正是要求的。
如果你出於某種原因擔心效率(而不關心保存順序或重複),那麼你可以使用'Data.Set.fromList'和'Data.Set.intersection' – 2012-02-16 23:16:36
最容易和高性能的方法來強制執行list2
相同list1
是說
let list2 = list1 in .......
這甚至不要求列表中的元素是相當的。
和這裏的,雖然我很喜歡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]
最後一個只是忽略第二個列表,並在第一罷了。
爲什麼你需要確保'list2'與'list1'相同?你不能只用'list1'嗎?我懷疑你的問題還有其他限制,爲了幫助你,我們需要知道這些限制。 – 2012-02-17 12:29:04