我是clojure的新手。我面臨的一個問題是從多個集合中找到特殊列表。查找來自clojure的多個收藏的列表
- 列表中的一個:(1 2 3 4 5)
- 列表中的兩個:(ABCDEF)
源列表:(1個C 2 B 4 EAF)
解釋在源找到列表:(a 1),(1a),(4c),(f 2)
如何解決?
感謝
我是clojure的新手。我面臨的一個問題是從多個集合中找到特殊列表。查找來自clojure的多個收藏的列表
源列表:(1個C 2 B 4 EAF)
解釋在源找到列表:(a 1),(1a),(4c),(f 2)
如何解決?
感謝
看一看https://github.com/clojure/math.combinatorics
=> (combo/cartesian-product [1 2] [3 4])
((1 3) (1 4) (2 3) (2 4))
對不起,困惑。它不是要從兩個列表中找到組合。請檢查上面的評論。 – hnsyqz
如果我對這個問題的理解是正確的,你不介意的蠻力,就可以使用這個解決方案。
(let [list1 '#{1 2 3 4 5}
list2 '#{a b c d e f}
source '(1 c 2 b 4 e a f)]
(for [x source
y source
:when (or (and (list1 x) (list2 y))
(and (list1 y) (list2 x)))]
[x y]))
=>
([1 C] [1 B] [1個E] [1] [1 F] [C 1] [C 2] [C 4] [2 C] [2 b] [2 e] [2 a] [2 f] [b 1] [b 2] [b 4] [4 c] [4 b] [4 e] [4 a] [4 f] [e 1] [e 2] [e 4] [a 1] [a 2] [a 4] [f 1] [f 2] [f 4])
您也可以使用shuffle來引入一些隨機性並使用拿n來獲得你需要的樣品。
或者爲了使它更簡單,只需從list1和list2中刪除不在源代碼中的項目並循環這些過濾列表。
好主意!我也會嘗試更簡單的解決方案。 – hnsyqz
*源列表*如何確定*特殊組合*?另一個例子或兩個可能會有所幫助 – Thumbnail
源列表恰好包含列表1和列表2中的項目。它可能不包含一個或兩個列表。這些組合不是由源列表確定的。他們是預先定義的。但是其中一個組合必須包含列表1和列表2中的一個。目標是在源列表中搜索每個組合。它不是要從這兩個列表中找到所有可能的組合。因此,另一組組合可以是(1f),(2e),(3c),(4b)。組合可能不是合適的詞。這只是兩個項目的列表。 – hnsyqz
「源列表中的每個組合」所以你想排列? ([1 1 2] [1 2 1] [2 1 1]) ' – nha