【问题标题】:How can I zip multipule List in Scala?如何在 Scala 中压缩多个列表?
【发布时间】:2017-06-12 20:54:56
【问题描述】:

举个例子,我有一个矩阵:Array[Array[Int]], m * n,我想压缩 m 个 Lists(rows)。

输入 m*n 矩阵:

val list = List( //m Lists
    List(1,2,3,...,n), //n Int in each List
    List(11,12,13,...,n),
    ...,
    ...,
    ...,
    List(91,92,93,...,n)
)

输出应该是:

List( // n Lists
    List(1,11,...,91), //m Int in each List
    List(2,12,...,92),
    List(3,13,...,93),
    ...,
    ...,
    ...,
    List(n,n,...,n)
)

在python中,我可以简单地做

map(list, zip(*matrix))

我已经看到了一些解决方案,但是,它们仅适用于压缩特定数量的列表。 Scala 中有没有像 Python 那样简洁的解决方案?

更新: 感谢回答,我发现Scala中的关键字是transpose,请查看类似问题:How to perform transpose on List of Lists in scala?

【问题讨论】:

  • 所以你本质上想要转置矩阵?目前尚不清楚您希望操作的输出是什么。也许一个示例输入/输出或输出类型将有助于澄清。

标签: scala


【解决方案1】:

如果所有子数组的元素个数相同,可以使用Array.transpose方法:

val arr = Array(Array(1,2,3), Array(4,5,6))
// arr: Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))

arr.transpose
// res8: Array[Array[Int]] = Array(Array(1, 4), Array(2, 5), Array(3, 6))

【讨论】:

  • 这正是我想做的,scala中的关键字是转置。谢谢。此外,如果子数组的长度不同,它看起来像: val arr = Array(Array(1,2,3), Array(4,5)) // arr: Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5)) arr.transpose // res8: Array[Array[Int]] = Array(Array(1, 4), Array(2, 5),数组(3))
猜你喜欢
  • 2011-01-28
  • 2014-05-23
  • 2011-11-20
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多