使用Scala收集方法可帮助将[0,0,0,1,1,1,1,0,0,1,1]的列表转换为[3,4,2,2]

菲尔

所以我有一个0和1的列表,我想找到每个元素的计数并将其输出到列表中。我可以想到使用函数的递归方法,但是是否有任何辅助函数可以帮助转换此函数?

我相信groupBy可能有用,但是似乎将所有元素分组到一个分区或另一个分区中,而不是按照我想要的方式分组。

我想要一个数字计数列表,直到每次从0到1以及从1到0的过渡为止。即,如果我们有0,0,0,..好的,我们计算了3个零,所以记住3,那么我们就有1 1,1,1,所以我们算了4个1,所以我们记得4,到目前为止,我们有一个[3,4 ...]的列表,依此类推

他们扔

这可能有点复杂。但是我会去的。

scala> implicit class ListHelper[A](ls:List[A]) {
         def partitionBy(f: (A, A) => Boolean) = if (ls.isEmpty) List.empty[Int] 
           else (ls zip (ls.head :: ls)).foldLeft(List.empty[Int]){
             case (Nil, _) => List(1)
             case (x :: xs, (a, b)) => if (a == b) (x + 1) :: xs else 1 :: x :: xs
         }.reverse
       }
defined class ListHelper

scala> List(0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1).partitionBy(_ == _)
res27: List[Int] = List(3, 4, 2, 2)

这是基于clojure函数 partition-by

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据阈值将NumPy数组转换为0或1

将字符串转换为Map Ex-字符串str =“ {Topic0:0,Topic1:1,Topic2:0}”;

使用request.getRemoteAddr()返回0:0:0:0:0:0:0:0:1

将数组转换为0和1

为什么1/2 == 0使用double?

在R中将(0,1,0,0,1,1,1)转换为(0,0,0,1,0,1,2)

如何使用a [0]-a [0] a [1]-a [0] a [1] a [2]输出数组

将类别变量列表转换为(0,1)列表

熊猫-将值转换为1和0的快速方法

将逻辑真/假转换为数字1/0?

我希望输出像[[0,0,0,0,],[0,1,0,0],[0,2,0,0],[0,3,0,0]]

使用重复和迭代的数字,例如[0,0,0,1,1,1,2,2,2来构建Python列表的最有效的计算方法。。。,等等]

将(1,1,1)和(0,0,0)以外的BGR通道转换为白色(255,255,255)

Swift 4-将1或0从mysql转换为bool

将'0'...'n'转换为'0''1'至'n'

该代码的含义([1、2、3] || 0)[0]

[“ $ {1:0:1}” ='-']的含义

如何阻止列表将1和0的混合转换为全0?

为什么Unix权限系统使用1 2 3 4 ...值而不是1或0?

创建序列0、0、0、0、0、1、1、1、1、1、2、2、2、2、2、3、3、3、3、3、4、4、4、4、4 ,带有seq()的4

如何使用as.numeric将随机数向量转换为0,1,2的向量?

将 1 和 0 转换为 Prolog 中的字符列表

python 将列表 [0, 1, 2, 3, 4, 5] 转换为 [0, 1, 2], [1,2,3], [2,3,4]

将条件转换为数字 0 1

索引 = 2 不在 [0, 1)

将数据帧转换为 1 和 0

JOIN (VALUES (0),(1),(2),(3),...... ON 逻辑)

在java中将0x1转换为1

如何使用 Python 将图像转换为 [1,0,0,1,0] 像素数组?