Table[ ]
命令通常返回一个与迭代器具有相同基数的列表。
Table[i, {i,4}]
(*
->{1,2,3,4}
*)
很容易证明可以返回一个比迭代器更大基数的列表
Table[Sequence @@ ConstantArray[1, i], {i, 2}]
(*
->{1,1,1}
*)
但是......有没有办法用迭代器返回 LESS 基数的列表?
答案 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}