List 将列表的大小扩展N
我对这个问题的措辞有困难,所以我为这个听起来含糊不清的标题道歉 我今天开始学习Scala。我想生成一个元素列表,然后将该列表乘以因子N,结果如下:List 将列表的大小扩展N,list,scala,List,Scala,我对这个问题的措辞有困难,所以我为这个听起来含糊不清的标题道歉 我今天开始学习Scala。我想生成一个元素列表,然后将该列表乘以因子N,结果如下: List(1, 2, 3, 4) * N -> List(1, 2, 3, 4, 1, 2, 3, 4) (where N = 2) 在Python中,我只需执行以下操作即可得到我想要的结果: my_list = [1, 2, 3, 4] * 2 但是,这在Scala中不起作用。您可以这样做: val l = List(1, 2, 3,
List(1, 2, 3, 4) * N -> List(1, 2, 3, 4, 1, 2, 3, 4) (where N = 2)
在Python中,我只需执行以下操作即可得到我想要的结果:
my_list = [1, 2, 3, 4] * 2
但是,这在Scala中不起作用。您可以这样做:
val l = List(1, 2, 3, 4)
val n = 2
val result = (1 to n)
.flatMap(_ => l)
.toList
试一试
或者提供模拟Python的扩展方法,比如
extension (l: List[Int])
def *(n: Int): List[Int] = List.fill(n)(l).flatten
List(1, 2, 3, 4) * 2
// : List[Int] = List(1, 2, 3, 4, 1, 2, 3, 4)
您的另一个选择是:
val l = List(1, 2, 3, 4)
val length = l.length
List.tabulate(length * n)(i => l(i % length))
可能类似于
Range(0,2).toList.flatMap(x=>List(1,2,3,4))
类似,但不完全相同:注意,如果列表有点大,这种方法效率很低,因为这里的所有操作都是O(N),您可能需要首先将List
转换为ArraySeq
,你说得对:)
val l = List(1, 2, 3, 4)
val length = l.length
List.tabulate(length * n)(i => l(i % length))