表[]输出基数

时间:2011-06-11 01:29:16

标签: wolfram-mathematica

Table[ ]命令通常返回一个与迭代器具有相同基数的列表。

Table[i, {i,4}] 
(*
->{1,2,3,4}
*)

很容易证明可以返回一个比迭代器更大基数的列表

Table[Sequence @@ ConstantArray[1, i], {i, 2}]
(*
->{1,1,1}
*)

但是......有没有办法用迭代器返回 LESS 基数的列表?

3 个答案:

答案 0 :(得分:3)

这应该有效:

Table[Sequence @@ {}, {i, 10}]

答案 1 :(得分:3)

假设我现在理解你的意图,我认为Table本身内“消除”消除的优势。人们可以通过以下方式实现它:

Table[If[EvenQ@i, i, ##&[]], {i, 25}]

但使用Join更快

Join @@ Table[If[EvenQ@i, {i}, {}], {i, 25}]

DeleteCases

DeleteCases[Table[If[EvenQ@i, i], {i, 25}], , 1]

在这个简单的例子中,Select的速度是原来的两倍:

Table[i, {i, 25}] ~Select~ EvenQ

如果是内存使用问题,使用Sequence的第一种方法确实会提前出现,但Join方法并不落后。

答案 2 :(得分:1)

一个简单的例子:

Table[Sequence @@ ConstantArray[1, i - 1], {i, 2}]
Out[1] = {1}

这并不总是返回具有较小基数的列表。例如,{i,3}返回相等,{i,4}返回更多。

或者更简单的例子是

Table[Sequence @@ {}, {i, 2}]

但我不知道它是否重要。


您也可以在Piecewise

中使用Table
Table[Sequence @@ Piecewise[{
    {ConstantArray[1, i], i < 3},
    {ConstantArray[2, i], 3 <= i < 5},
    {{}, i >= 5}}],
 {i, 20}]

Out[2] = {1, 1, 1, 2, 2, 2, 2, 2, 2, 2}