Scala:如何以一切可能的方式将列表拆分为元组

时间:2018-05-25 10:17:41

标签: algorithm scala list tuples combinations

我们为每个产品提供一个存储空间。每个订单都包含一组产品。存储工人有一个小车,可以容纳N个订单。 有关订单列表,请找到解决该列表的所有可能解决方案。

(我正在寻找一种算法,创建将列表拆分为元组的所有可能性,其中元组或元素的顺序无关紧要。)

这里是一个小车最多2个订单(N = 2)的示例。

val orders = List(1,2,3,4)
findAllSolutions(orders, 2)
List(
    Solution(Trolley(1,2),Trolley(3,4)), 
    Solution(Trolley(1,3),Trolley(2,4)), 
    Solution(Trolley(1,4),Trolley(2,3))
)

我可以尝试

def tuplelize(lst: List[Int], tplLen) = List(1,2,3,4).permutations.map(l => l.grouped(tplLen).toList)

但这会多次产生相同的结果。 E.g。

List((1,2),(3,4))

List((2,1),(4,3))

是一样的。

可能性是:

List(1,2,3,4).combinations(2).combinations(2).filter(_.flatten.toSet.size == 4)

但这似乎效率很低...... 澄清事物的另一个例子: 给出是一个List(1,2,3,4,5),我想将它拆分为最大长度为3的子列表。给出所有可能的解决方案,使用最少的子列表计数,这样就可以找到每个元素在解决方案中只有一次

Solution1: List(List(1,2,3),List(4,5))
Solution2: List(List(1,2,4),List(3,5))
Solution2: List(List(1,2,5),List(3,4))
...

现在不需要的解决方案是:

DoubleSolution: List(List(3,2,1),List(5,4))

3 个答案:

答案 0 :(得分:1)

枚举具有最少子集数的分区,这样除了最多一个子集外,所有子集的大小最多为M

以下代码执行以下操作:

给定一个不同元素列表和一些大小M,它枚举List[List[Int]]类型的所有分区,以便:

  • 分区的每个子集(由List[Int]表示)最多包含M个元素
  • 子集的数量是最小的
  • 最多只有一个子元素少于M元素

即,(几乎)所有子集的大小为M,最多只有一个例外。然后,例外的大小为N % M,其中N是原始列表中元素的数量。

<强>解决方案

事实证明这并非完全无足轻重。尤其是子集的大小不必分割元素数量的事实是令人讨厌的,因为它以另一种方式打破了对称性。

这是一个由三个阶段组成的解决方案:

  1. 解决分区大小除以列表大小(sameSizePartitions
  2. 的问题
  3. 解决生成任意规定大小(prescribedSizePartition
  4. 的分区的更一般问题
  5. 预先设置一个计算规定尺寸的薄包装maxSizePartitions并调用prescribedSizePartition
  6. 所以,它是:首先概括,解决不同的特殊情况,使用不同的特殊情况来解决一般情况,使用一般情况来实现所需的功能。

    这是它的样子:

    type Partition = List[List[Int]]
    
    def sameSizePartitions(elems: List[Int], partSize: Int): List[Partition] = {
      def recHelper(unused: List[Int]): List[Partition] = {
        if (unused.size <= partSize) {
          List(List(unused))
        } else {
          val h :: t = unused
          (for {
            combination <- t.combinations(partSize - 1)
            tail <- recHelper(t filterNot combination.contains)
          } yield (h :: combination) :: tail).toList
        }
      }
      recHelper(elems)
    }
    
    /**
     * @param elems list with unique elements
     * @param sizes map (size -> numberOfPartitionsWithThisSize)
     */
    def prescribedSizePartitions(elems: List[Int], sizes: Map[Int, Int]): List[Partition] = {
      if (sizes.isEmpty) {
        if (elems.isEmpty) List(Nil) 
        else throw new IllegalArgumentException("sizes empty, but elems = " + elems)
      } else {
        val (size, numberOfPartitions) = sizes.head
        val numElementsNeededForPartitionsOfThisSize = size * numberOfPartitions
        for {
          elemSelection <- elems.combinations(numElementsNeededForPartitionsOfThisSize).toList
          tailPartition <- prescribedSizePartitions(elems.filterNot(elemSelection.contains), sizes - size)
          currSizePart <- sameSizePartitions(elemSelection, size)
        } yield currSizePart ++ tailPartition
      }
    }
    
    def maxSizePartitions(elems: List[Int], maxSize: Int): List[Partition] = {
      val n = elems.size
      val ofMaxSize = n / maxSize
      val restSize = n % maxSize
      if (restSize == 0) {
        sameSizePartitions(elems, maxSize)
      } else {
        prescribedSizePartitions(elems, Map(maxSize -> ofMaxSize, restSize -> 1))
      }
    }
    

    示例:

    maxSizePartitions((1 to 4).toList, 2) foreach println
    maxSizePartitions((1 to 5).toList, 3) foreach println
    maxSizePartitions((1 to 8).toList, 3) foreach println
    

    输出:

    List(List(1, 2), List(3, 4))
    List(List(1, 3), List(2, 4))
    List(List(1, 4), List(2, 3))
    
    List(List(1, 2, 3), List(4, 5))
    List(List(1, 2, 4), List(3, 5))
    List(List(1, 2, 5), List(3, 4))
    List(List(1, 3, 4), List(2, 5))
    List(List(1, 3, 5), List(2, 4))
    List(List(1, 4, 5), List(2, 3))
    List(List(2, 3, 4), List(1, 5))
    List(List(2, 3, 5), List(1, 4))
    List(List(2, 4, 5), List(1, 3))
    List(List(3, 4, 5), List(1, 2))
    
    List(List(1, 2, 3), List(4, 5, 6), List(7, 8))
    List(List(1, 2, 4), List(3, 5, 6), List(7, 8))
    List(List(1, 2, 5), List(3, 4, 6), List(7, 8))
    List(List(1, 2, 6), List(3, 4, 5), List(7, 8))
    List(List(1, 3, 4), List(2, 5, 6), List(7, 8))
    List(List(1, 3, 5), List(2, 4, 6), List(7, 8))
    List(List(1, 3, 6), List(2, 4, 5), List(7, 8))
    List(List(1, 4, 5), List(2, 3, 6), List(7, 8))
    List(List(1, 4, 6), List(2, 3, 5), List(7, 8))
    List(List(1, 5, 6), List(2, 3, 4), List(7, 8))
    List(List(1, 2, 3), List(4, 5, 7), List(6, 8))
    List(List(1, 2, 4), List(3, 5, 7), List(6, 8))
    List(List(1, 2, 5), List(3, 4, 7), List(6, 8))
    List(List(1, 2, 7), List(3, 4, 5), List(6, 8))
    List(List(1, 3, 4), List(2, 5, 7), List(6, 8))
    List(List(1, 3, 5), List(2, 4, 7), List(6, 8))
    List(List(1, 3, 7), List(2, 4, 5), List(6, 8))
    List(List(1, 4, 5), List(2, 3, 7), List(6, 8))
    List(List(1, 4, 7), List(2, 3, 5), List(6, 8))
    List(List(1, 5, 7), List(2, 3, 4), List(6, 8))
    List(List(1, 2, 3), List(4, 5, 8), List(6, 7))
    List(List(1, 2, 4), List(3, 5, 8), List(6, 7))
    List(List(1, 2, 5), List(3, 4, 8), List(6, 7))
    List(List(1, 2, 8), List(3, 4, 5), List(6, 7))
    List(List(1, 3, 4), List(2, 5, 8), List(6, 7))
    List(List(1, 3, 5), List(2, 4, 8), List(6, 7))
    List(List(1, 3, 8), List(2, 4, 5), List(6, 7))
    List(List(1, 4, 5), List(2, 3, 8), List(6, 7))
    List(List(1, 4, 8), List(2, 3, 5), List(6, 7))
    List(List(1, 5, 8), List(2, 3, 4), List(6, 7))
    List(List(1, 2, 3), List(4, 6, 7), List(5, 8))
    List(List(1, 2, 4), List(3, 6, 7), List(5, 8))
    List(List(1, 2, 6), List(3, 4, 7), List(5, 8))
    List(List(1, 2, 7), List(3, 4, 6), List(5, 8))
    List(List(1, 3, 4), List(2, 6, 7), List(5, 8))
    List(List(1, 3, 6), List(2, 4, 7), List(5, 8))
    List(List(1, 3, 7), List(2, 4, 6), List(5, 8))
    List(List(1, 4, 6), List(2, 3, 7), List(5, 8))
    List(List(1, 4, 7), List(2, 3, 6), List(5, 8))
    List(List(1, 6, 7), List(2, 3, 4), List(5, 8))
    List(List(1, 2, 3), List(4, 6, 8), List(5, 7))
    List(List(1, 2, 4), List(3, 6, 8), List(5, 7))
    List(List(1, 2, 6), List(3, 4, 8), List(5, 7))
    List(List(1, 2, 8), List(3, 4, 6), List(5, 7))
    List(List(1, 3, 4), List(2, 6, 8), List(5, 7))
    List(List(1, 3, 6), List(2, 4, 8), List(5, 7))
    List(List(1, 3, 8), List(2, 4, 6), List(5, 7))
    List(List(1, 4, 6), List(2, 3, 8), List(5, 7))
    List(List(1, 4, 8), List(2, 3, 6), List(5, 7))
    List(List(1, 6, 8), List(2, 3, 4), List(5, 7))
    List(List(1, 2, 3), List(4, 7, 8), List(5, 6))
    List(List(1, 2, 4), List(3, 7, 8), List(5, 6))
    List(List(1, 2, 7), List(3, 4, 8), List(5, 6))
    List(List(1, 2, 8), List(3, 4, 7), List(5, 6))
    List(List(1, 3, 4), List(2, 7, 8), List(5, 6))
    List(List(1, 3, 7), List(2, 4, 8), List(5, 6))
    List(List(1, 3, 8), List(2, 4, 7), List(5, 6))
    List(List(1, 4, 7), List(2, 3, 8), List(5, 6))
    List(List(1, 4, 8), List(2, 3, 7), List(5, 6))
    List(List(1, 7, 8), List(2, 3, 4), List(5, 6))
    List(List(1, 2, 3), List(5, 6, 7), List(4, 8))
    List(List(1, 2, 5), List(3, 6, 7), List(4, 8))
    List(List(1, 2, 6), List(3, 5, 7), List(4, 8))
    List(List(1, 2, 7), List(3, 5, 6), List(4, 8))
    List(List(1, 3, 5), List(2, 6, 7), List(4, 8))
    List(List(1, 3, 6), List(2, 5, 7), List(4, 8))
    List(List(1, 3, 7), List(2, 5, 6), List(4, 8))
    List(List(1, 5, 6), List(2, 3, 7), List(4, 8))
    List(List(1, 5, 7), List(2, 3, 6), List(4, 8))
    List(List(1, 6, 7), List(2, 3, 5), List(4, 8))
    List(List(1, 2, 3), List(5, 6, 8), List(4, 7))
    List(List(1, 2, 5), List(3, 6, 8), List(4, 7))
    List(List(1, 2, 6), List(3, 5, 8), List(4, 7))
    List(List(1, 2, 8), List(3, 5, 6), List(4, 7))
    List(List(1, 3, 5), List(2, 6, 8), List(4, 7))
    List(List(1, 3, 6), List(2, 5, 8), List(4, 7))
    List(List(1, 3, 8), List(2, 5, 6), List(4, 7))
    List(List(1, 5, 6), List(2, 3, 8), List(4, 7))
    List(List(1, 5, 8), List(2, 3, 6), List(4, 7))
    List(List(1, 6, 8), List(2, 3, 5), List(4, 7))
    List(List(1, 2, 3), List(5, 7, 8), List(4, 6))
    List(List(1, 2, 5), List(3, 7, 8), List(4, 6))
    List(List(1, 2, 7), List(3, 5, 8), List(4, 6))
    List(List(1, 2, 8), List(3, 5, 7), List(4, 6))
    List(List(1, 3, 5), List(2, 7, 8), List(4, 6))
    List(List(1, 3, 7), List(2, 5, 8), List(4, 6))
    List(List(1, 3, 8), List(2, 5, 7), List(4, 6))
    List(List(1, 5, 7), List(2, 3, 8), List(4, 6))
    List(List(1, 5, 8), List(2, 3, 7), List(4, 6))
    List(List(1, 7, 8), List(2, 3, 5), List(4, 6))
    List(List(1, 2, 3), List(6, 7, 8), List(4, 5))
    List(List(1, 2, 6), List(3, 7, 8), List(4, 5))
    List(List(1, 2, 7), List(3, 6, 8), List(4, 5))
    List(List(1, 2, 8), List(3, 6, 7), List(4, 5))
    List(List(1, 3, 6), List(2, 7, 8), List(4, 5))
    List(List(1, 3, 7), List(2, 6, 8), List(4, 5))
    List(List(1, 3, 8), List(2, 6, 7), List(4, 5))
    List(List(1, 6, 7), List(2, 3, 8), List(4, 5))
    List(List(1, 6, 8), List(2, 3, 7), List(4, 5))
    List(List(1, 7, 8), List(2, 3, 6), List(4, 5))
    List(List(1, 2, 4), List(5, 6, 7), List(3, 8))
    List(List(1, 2, 5), List(4, 6, 7), List(3, 8))
    List(List(1, 2, 6), List(4, 5, 7), List(3, 8))
    List(List(1, 2, 7), List(4, 5, 6), List(3, 8))
    List(List(1, 4, 5), List(2, 6, 7), List(3, 8))
    List(List(1, 4, 6), List(2, 5, 7), List(3, 8))
    List(List(1, 4, 7), List(2, 5, 6), List(3, 8))
    List(List(1, 5, 6), List(2, 4, 7), List(3, 8))
    List(List(1, 5, 7), List(2, 4, 6), List(3, 8))
    List(List(1, 6, 7), List(2, 4, 5), List(3, 8))
    List(List(1, 2, 4), List(5, 6, 8), List(3, 7))
    List(List(1, 2, 5), List(4, 6, 8), List(3, 7))
    List(List(1, 2, 6), List(4, 5, 8), List(3, 7))
    List(List(1, 2, 8), List(4, 5, 6), List(3, 7))
    List(List(1, 4, 5), List(2, 6, 8), List(3, 7))
    List(List(1, 4, 6), List(2, 5, 8), List(3, 7))
    List(List(1, 4, 8), List(2, 5, 6), List(3, 7))
    List(List(1, 5, 6), List(2, 4, 8), List(3, 7))
    List(List(1, 5, 8), List(2, 4, 6), List(3, 7))
    List(List(1, 6, 8), List(2, 4, 5), List(3, 7))
    List(List(1, 2, 4), List(5, 7, 8), List(3, 6))
    List(List(1, 2, 5), List(4, 7, 8), List(3, 6))
    List(List(1, 2, 7), List(4, 5, 8), List(3, 6))
    List(List(1, 2, 8), List(4, 5, 7), List(3, 6))
    List(List(1, 4, 5), List(2, 7, 8), List(3, 6))
    List(List(1, 4, 7), List(2, 5, 8), List(3, 6))
    List(List(1, 4, 8), List(2, 5, 7), List(3, 6))
    List(List(1, 5, 7), List(2, 4, 8), List(3, 6))
    List(List(1, 5, 8), List(2, 4, 7), List(3, 6))
    List(List(1, 7, 8), List(2, 4, 5), List(3, 6))
    List(List(1, 2, 4), List(6, 7, 8), List(3, 5))
    List(List(1, 2, 6), List(4, 7, 8), List(3, 5))
    List(List(1, 2, 7), List(4, 6, 8), List(3, 5))
    List(List(1, 2, 8), List(4, 6, 7), List(3, 5))
    List(List(1, 4, 6), List(2, 7, 8), List(3, 5))
    List(List(1, 4, 7), List(2, 6, 8), List(3, 5))
    List(List(1, 4, 8), List(2, 6, 7), List(3, 5))
    List(List(1, 6, 7), List(2, 4, 8), List(3, 5))
    List(List(1, 6, 8), List(2, 4, 7), List(3, 5))
    List(List(1, 7, 8), List(2, 4, 6), List(3, 5))
    List(List(1, 2, 5), List(6, 7, 8), List(3, 4))
    List(List(1, 2, 6), List(5, 7, 8), List(3, 4))
    List(List(1, 2, 7), List(5, 6, 8), List(3, 4))
    List(List(1, 2, 8), List(5, 6, 7), List(3, 4))
    List(List(1, 5, 6), List(2, 7, 8), List(3, 4))
    List(List(1, 5, 7), List(2, 6, 8), List(3, 4))
    List(List(1, 5, 8), List(2, 6, 7), List(3, 4))
    List(List(1, 6, 7), List(2, 5, 8), List(3, 4))
    List(List(1, 6, 8), List(2, 5, 7), List(3, 4))
    List(List(1, 7, 8), List(2, 5, 6), List(3, 4))
    List(List(1, 3, 4), List(5, 6, 7), List(2, 8))
    List(List(1, 3, 5), List(4, 6, 7), List(2, 8))
    List(List(1, 3, 6), List(4, 5, 7), List(2, 8))
    List(List(1, 3, 7), List(4, 5, 6), List(2, 8))
    List(List(1, 4, 5), List(3, 6, 7), List(2, 8))
    List(List(1, 4, 6), List(3, 5, 7), List(2, 8))
    List(List(1, 4, 7), List(3, 5, 6), List(2, 8))
    List(List(1, 5, 6), List(3, 4, 7), List(2, 8))
    List(List(1, 5, 7), List(3, 4, 6), List(2, 8))
    List(List(1, 6, 7), List(3, 4, 5), List(2, 8))
    List(List(1, 3, 4), List(5, 6, 8), List(2, 7))
    List(List(1, 3, 5), List(4, 6, 8), List(2, 7))
    List(List(1, 3, 6), List(4, 5, 8), List(2, 7))
    List(List(1, 3, 8), List(4, 5, 6), List(2, 7))
    List(List(1, 4, 5), List(3, 6, 8), List(2, 7))
    List(List(1, 4, 6), List(3, 5, 8), List(2, 7))
    List(List(1, 4, 8), List(3, 5, 6), List(2, 7))
    List(List(1, 5, 6), List(3, 4, 8), List(2, 7))
    List(List(1, 5, 8), List(3, 4, 6), List(2, 7))
    List(List(1, 6, 8), List(3, 4, 5), List(2, 7))
    List(List(1, 3, 4), List(5, 7, 8), List(2, 6))
    List(List(1, 3, 5), List(4, 7, 8), List(2, 6))
    List(List(1, 3, 7), List(4, 5, 8), List(2, 6))
    List(List(1, 3, 8), List(4, 5, 7), List(2, 6))
    List(List(1, 4, 5), List(3, 7, 8), List(2, 6))
    List(List(1, 4, 7), List(3, 5, 8), List(2, 6))
    List(List(1, 4, 8), List(3, 5, 7), List(2, 6))
    List(List(1, 5, 7), List(3, 4, 8), List(2, 6))
    List(List(1, 5, 8), List(3, 4, 7), List(2, 6))
    List(List(1, 7, 8), List(3, 4, 5), List(2, 6))
    List(List(1, 3, 4), List(6, 7, 8), List(2, 5))
    List(List(1, 3, 6), List(4, 7, 8), List(2, 5))
    List(List(1, 3, 7), List(4, 6, 8), List(2, 5))
    List(List(1, 3, 8), List(4, 6, 7), List(2, 5))
    List(List(1, 4, 6), List(3, 7, 8), List(2, 5))
    List(List(1, 4, 7), List(3, 6, 8), List(2, 5))
    List(List(1, 4, 8), List(3, 6, 7), List(2, 5))
    List(List(1, 6, 7), List(3, 4, 8), List(2, 5))
    List(List(1, 6, 8), List(3, 4, 7), List(2, 5))
    List(List(1, 7, 8), List(3, 4, 6), List(2, 5))
    List(List(1, 3, 5), List(6, 7, 8), List(2, 4))
    List(List(1, 3, 6), List(5, 7, 8), List(2, 4))
    List(List(1, 3, 7), List(5, 6, 8), List(2, 4))
    List(List(1, 3, 8), List(5, 6, 7), List(2, 4))
    List(List(1, 5, 6), List(3, 7, 8), List(2, 4))
    List(List(1, 5, 7), List(3, 6, 8), List(2, 4))
    List(List(1, 5, 8), List(3, 6, 7), List(2, 4))
    List(List(1, 6, 7), List(3, 5, 8), List(2, 4))
    List(List(1, 6, 8), List(3, 5, 7), List(2, 4))
    List(List(1, 7, 8), List(3, 5, 6), List(2, 4))
    List(List(1, 4, 5), List(6, 7, 8), List(2, 3))
    List(List(1, 4, 6), List(5, 7, 8), List(2, 3))
    List(List(1, 4, 7), List(5, 6, 8), List(2, 3))
    List(List(1, 4, 8), List(5, 6, 7), List(2, 3))
    List(List(1, 5, 6), List(4, 7, 8), List(2, 3))
    List(List(1, 5, 7), List(4, 6, 8), List(2, 3))
    List(List(1, 5, 8), List(4, 6, 7), List(2, 3))
    List(List(1, 6, 7), List(4, 5, 8), List(2, 3))
    List(List(1, 6, 8), List(4, 5, 7), List(2, 3))
    List(List(1, 7, 8), List(4, 5, 6), List(2, 3))
    List(List(2, 3, 4), List(5, 6, 7), List(1, 8))
    List(List(2, 3, 5), List(4, 6, 7), List(1, 8))
    List(List(2, 3, 6), List(4, 5, 7), List(1, 8))
    List(List(2, 3, 7), List(4, 5, 6), List(1, 8))
    List(List(2, 4, 5), List(3, 6, 7), List(1, 8))
    List(List(2, 4, 6), List(3, 5, 7), List(1, 8))
    List(List(2, 4, 7), List(3, 5, 6), List(1, 8))
    List(List(2, 5, 6), List(3, 4, 7), List(1, 8))
    List(List(2, 5, 7), List(3, 4, 6), List(1, 8))
    List(List(2, 6, 7), List(3, 4, 5), List(1, 8))
    List(List(2, 3, 4), List(5, 6, 8), List(1, 7))
    List(List(2, 3, 5), List(4, 6, 8), List(1, 7))
    List(List(2, 3, 6), List(4, 5, 8), List(1, 7))
    List(List(2, 3, 8), List(4, 5, 6), List(1, 7))
    List(List(2, 4, 5), List(3, 6, 8), List(1, 7))
    List(List(2, 4, 6), List(3, 5, 8), List(1, 7))
    List(List(2, 4, 8), List(3, 5, 6), List(1, 7))
    List(List(2, 5, 6), List(3, 4, 8), List(1, 7))
    List(List(2, 5, 8), List(3, 4, 6), List(1, 7))
    List(List(2, 6, 8), List(3, 4, 5), List(1, 7))
    List(List(2, 3, 4), List(5, 7, 8), List(1, 6))
    List(List(2, 3, 5), List(4, 7, 8), List(1, 6))
    List(List(2, 3, 7), List(4, 5, 8), List(1, 6))
    List(List(2, 3, 8), List(4, 5, 7), List(1, 6))
    List(List(2, 4, 5), List(3, 7, 8), List(1, 6))
    List(List(2, 4, 7), List(3, 5, 8), List(1, 6))
    List(List(2, 4, 8), List(3, 5, 7), List(1, 6))
    List(List(2, 5, 7), List(3, 4, 8), List(1, 6))
    List(List(2, 5, 8), List(3, 4, 7), List(1, 6))
    List(List(2, 7, 8), List(3, 4, 5), List(1, 6))
    List(List(2, 3, 4), List(6, 7, 8), List(1, 5))
    List(List(2, 3, 6), List(4, 7, 8), List(1, 5))
    List(List(2, 3, 7), List(4, 6, 8), List(1, 5))
    List(List(2, 3, 8), List(4, 6, 7), List(1, 5))
    List(List(2, 4, 6), List(3, 7, 8), List(1, 5))
    List(List(2, 4, 7), List(3, 6, 8), List(1, 5))
    List(List(2, 4, 8), List(3, 6, 7), List(1, 5))
    List(List(2, 6, 7), List(3, 4, 8), List(1, 5))
    List(List(2, 6, 8), List(3, 4, 7), List(1, 5))
    List(List(2, 7, 8), List(3, 4, 6), List(1, 5))
    List(List(2, 3, 5), List(6, 7, 8), List(1, 4))
    List(List(2, 3, 6), List(5, 7, 8), List(1, 4))
    List(List(2, 3, 7), List(5, 6, 8), List(1, 4))
    List(List(2, 3, 8), List(5, 6, 7), List(1, 4))
    List(List(2, 5, 6), List(3, 7, 8), List(1, 4))
    List(List(2, 5, 7), List(3, 6, 8), List(1, 4))
    List(List(2, 5, 8), List(3, 6, 7), List(1, 4))
    List(List(2, 6, 7), List(3, 5, 8), List(1, 4))
    List(List(2, 6, 8), List(3, 5, 7), List(1, 4))
    List(List(2, 7, 8), List(3, 5, 6), List(1, 4))
    List(List(2, 4, 5), List(6, 7, 8), List(1, 3))
    List(List(2, 4, 6), List(5, 7, 8), List(1, 3))
    List(List(2, 4, 7), List(5, 6, 8), List(1, 3))
    List(List(2, 4, 8), List(5, 6, 7), List(1, 3))
    List(List(2, 5, 6), List(4, 7, 8), List(1, 3))
    List(List(2, 5, 7), List(4, 6, 8), List(1, 3))
    List(List(2, 5, 8), List(4, 6, 7), List(1, 3))
    List(List(2, 6, 7), List(4, 5, 8), List(1, 3))
    List(List(2, 6, 8), List(4, 5, 7), List(1, 3))
    List(List(2, 7, 8), List(4, 5, 6), List(1, 3))
    List(List(3, 4, 5), List(6, 7, 8), List(1, 2))
    List(List(3, 4, 6), List(5, 7, 8), List(1, 2))
    List(List(3, 4, 7), List(5, 6, 8), List(1, 2))
    List(List(3, 4, 8), List(5, 6, 7), List(1, 2))
    List(List(3, 5, 6), List(4, 7, 8), List(1, 2))
    List(List(3, 5, 7), List(4, 6, 8), List(1, 2))
    List(List(3, 5, 8), List(4, 6, 7), List(1, 2))
    List(List(3, 6, 7), List(4, 5, 8), List(1, 2))
    List(List(3, 6, 8), List(4, 5, 7), List(1, 2))
    List(List(3, 7, 8), List(4, 5, 6), List(1, 2))
    

    我希望这次我解决了正确的问题?

答案 1 :(得分:0)

scala> val list = List(1,2,3,4)
// l: List[Int] = List(1, 2, 3, 4)

scala> val setList = list.toSet.subsets(2).toList
// setList: List[scala.collection.immutable.Set[Int]] = List(Set(1, 2), Set(1, 3), Set(1, 4), Set(2, 3), Set(2, 4), Set(3, 4))

scala> val tupleList = setList.map(_.toList).map({ case List(x, y) => (x, y)})
// tupleList: List[(Int, Int)] = List((1,2), (1,3), (1,4), (2,3), (2,4), (3,4))

答案 2 :(得分:0)

好的,到目前为止,这就是我所拥有的:

train_X.shape= (24576, 192, 6)
pred_X.shape= (672, 192, 6)
pred_Y.shape= (672, 192, 6)
y1.shape = (24576,1)
y2.shape = (24576,1)

我认为这更符合预期的结果,但并不完全符合预期的格式。

编辑:

到目前为止一切顺利:

scala> List(1,2,3,4).permutations.map(x => x.sliding(2,2).toSet).flatten.map(z => z.sorted).toSet
res24: scala.collection.immutable.Set[List[Int]] = Set(List(3, 4), List(1, 2), List(2, 3), List(1, 4), List(2, 4), List(1, 3))

是的,这只适用于你想要2号大小的元组,因此不是很有活力。 ¯\ _(ツ)_ /¯