【发布时间】:2022-01-20 22:34:26
【问题描述】:
我想检查嵌套列表中的元素。
我已经尝试了几种方法,但我总是会得到错误的结果或一些错误。
[X] `elem` [[X,X,X],[O,O,O]]
返回 False 但应该是 True
X `elem` [[X,X,X],[O,O,O]]
抛出错误,类型无法匹配。
我错过了什么吗?
【问题讨论】:
我想检查嵌套列表中的元素。
我已经尝试了几种方法,但我总是会得到错误的结果或一些错误。
[X] `elem` [[X,X,X],[O,O,O]]
返回 False 但应该是 True
X `elem` [[X,X,X],[O,O,O]]
抛出错误,类型无法匹配。
我错过了什么吗?
【问题讨论】:
列表的元素是子列表,列表中没有[X]子列表。
您可以检查子列表的任何元素是否包含X:
<strong>any (elem X)</strong> [[X, X, X], [O, O, O]]
或使用elem 作为中缀运算符:
<strong>any (X `elem`)</strong> [[X, X, X], [O, O, O]]
但它们在语义上是完全相同的。
这些将检查 任何 个子列表(此处为 [X, X, X] 和 [O, O, O]),X 是否是这些列表的一个元素。
另一个选项,@amalloy described 是将所有子列表连接到一个列表中,然后对这些执行elem 检查,所以:
elem X (<strong>concat</strong> [[X, X, X], [O, O, O]])
【讨论】:
elem X (concat xs)。