【问题标题】:Print Cartesian product of two list, without nested foreach打印两个列表的笛卡尔积,没有嵌套的 foreach
【发布时间】:2014-11-13 06:40:48
【问题描述】:

我需要计算两个列表的笛卡尔积。

我的列表包含大量元素,因此嵌套 foreach 在我的情况下不是一个好主意。

还有什么可以用的吗?

【问题讨论】:

  • 在大街上的说法是,您无法摆脱产品的复杂性(例如参见stackoverflow.com/a/1741391/488796)。有一些方法可以加快速度,但需要更多信息。 “大”有多大?您的代码是在脚本行中,还是在您正在调用的 proc 中(这对于字节编码很重要)?

标签: tcl cartesian-product


【解决方案1】:

您也许可以在将这些值组合在一起时对其进行处理。如果没有您正在使用的结构的快照,就很难说。这是一个简单的例子。

proc 不返回一个矩阵,它对矩阵中的点起作用。

proc my_cartesian {a b} {

    set len_a [llength $a]
    set len_b [llength $b]
    set len [expr $len_a * $len_b]
    set y 0
    for {set i 0} {$i < $len} {incr i} {
        set x [expr $i % $len_a]
        if {$x == 0 && $i != 0} {
            incr y
        }
        set px [lindex $a $x]
        set py [lindex $b $y]

        # Your code
        puts "$px, $py"
    }

}

my_cartesian {a b c} {1 2 3}

输出:

a, 1
b, 1
c, 1
a, 2
b, 2
c, 2
a, 3
b, 3
c, 3

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2018-11-09
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2021-01-25
    • 2015-07-29
    相关资源
    最近更新 更多