首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算嵌套列表的两两差异

计算嵌套列表的两两差异
EN

Stack Overflow用户
提问于 2019-10-04 16:48:35
回答 2查看 139关注 0票数 0

我有一个由下列项目组成的列表(列为5,始终如此):

代码语言:javascript
运行
复制
(   
 (1 3 2 4 5)   
 (2 5 1 3 1)   
 (0 8 1 2 2)  
 ...  
)

我想获得另一份名单

  • 每个项都是一个列表
  • 第n个子列表中的ith项是原始输入的第n个和(n +1)个子列表之间的差异。

在上面的例子中,结果是:

代码语言:javascript
运行
复制
(   
 (-1 -2 1 1 4)   
 (2 -3 0 1 -1)  
 ... 
)

第一个列表(-1 -2 1 1 4)是在原始输入中接受第一和第二列表的结果。

(1 3 2 4 5)

(2 5 1 3 1)

然后用相同的索引减去元素

( 1-2 3-5 2-1 4-3 5-1)

诸若此类。

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-04 16:54:34

要处理相邻元素对,可以传递两个map集合:原始集合和其自身的偏移版本:

代码语言:javascript
运行
复制
(defn diffs [xs]
  (map #(map - % %2) xs (rest xs)))
票数 6
EN

Stack Overflow用户

发布于 2019-10-04 18:10:16

阿美比我早,但既然我已经开始这里是一个版本使用的减少。由于我们必须将大量的信息保存在累加器中,这太复杂了:

代码语言:javascript
运行
复制
(first ; we are only interested in the accumulator, hence the outer 'first'
 (reduce (fn [[acc prev] curr] [(conj acc (mapv - prev curr)) curr])
  [[] (first test)] 
  (rest test)))

和一个更干净的版本,基本上是相同的,上面的答案(我喜欢他更多)。

代码语言:javascript
运行
复制
(map (fn [[v1 v2]] (map - v1 v2)) 
     (partition 2 1 test))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58240381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档