【发布时间】:2017-12-21 04:39:48
【问题描述】:
我有两个列表,lst1 和 lst2。我想定义一个函数来检查它们是否共享某些元素。例如:
-
(share-some-elements? '(a b) '(a c))⇒ 是的 -
(share-some-elements? '(a b) '(d e f))⇒ 错误 -
(share-some-elements? '(a b) '(a b d e))⇒ 是的
我有一个实现:
(define (share-some-elements? lst1 lst2)
(ormap (λ (x) (member x lst1)) lst2))
检查lst2 中的每个元素是否是lst1 的成员,如果其中任何一个是则返回true。
我的问题是:
- 还有哪些其他方法可以做到这一点?
- 如何扩展它以支持任意数量的列表? IE。
-
(all-share-some-elements? '(a b) '(a c) '(a d))⇒ 是的 -
(all-share-some-elements? '(a b) '(a c) '(b d))⇒ 错误 -
(all-share-some-elements? '(a b) '(a c) '(b d a))⇒ 是的
-
关于如何在 python 中的两个列表上执行此操作有一个类似的问题: Checking if two lists share at least one element,这并不能完全回答我的问题。
【问题讨论】:
-
您可以使用set-intersection,它适用于多个列表。如果交集不是空的,那么你有共同的元素。