从Scala中的列表列表中删除零行

从Scala中的列表列表中删除零行,scala,Scala,我在Scala中有一个列表,例如: val lst = List(List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0), List(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0)) 我想删除所有零行,结果如下: List(List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0), List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0)) Scala l

我在Scala中有一个列表,例如:

val lst = List(List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0), List(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0))
我想删除所有零行,结果如下:

List(List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0), List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0))

Scala list是否有任何内置方法来删除这些行

您可以使用
过滤器
仅保留与谓词匹配的项(列表);谓词可以使用
exists
检查非零元素:

lst.filter(_.exists(_ != 0))

@Tzach-Zohar的答案很好,但这里有另一种方法

scala> lst.filterNot(xs => xs.forall(_ == 0))
res0: List[List[Int]] = List(
  List(60, 0, 1, 2, 3, 28, 0, 0, 0, 0),
  List(47, 0, 1, 1, 2, 28, 0, 0, 0, 0)
)

谢谢。还有一个相关问题:如何删除至少有一个负值(如-1)的行?我尝试了lst.filter(.exists(=-1)),但它返回所有行,其中一个元素为-1。“至少有一个负值”将转换为
exists(
),您想删除它们,所以需要相反的结果:
lst.filter(\u>=0))
,对吗?