Mathematica Pick一拿到3就停止列表

时间:2011-04-01 21:02:38

标签: list wolfram-mathematica

这就是我所拥有的......

Select[roll, # <= 3 &]

现在,下面的列表可能有一个3或两个三个。我希望它从左到右停在前三个。

数学家试图编码。

3 个答案:

答案 0 :(得分:7)

注意:我删除了原始帖子,这基本上与belisarius的帖子相同。这是另一次尝试......

如果您确定数字3是roll的成员,那么这应该有效:

TakeWhile[roll, # != 3 &]~Append~3

这相当于:

Take[roll, LengthWhile[roll, # != 3 &] +1]

如果您无法做出此假设,请先使用MemberQ

进行测试

编辑:感谢TomD在第二个解决方案中建议+1,这样就无需使用Append

答案 1 :(得分:6)

这比整数列表上的TakeWhile快一个数量级。

list /. {x___, 3, ___} :> {x}

要获取 3列表,只需在右侧使用{x, 3}

答案 2 :(得分:1)

您可以尝试以下方式:

f[list_, item_] := list[[1 ;; Position[list, item][[1, 1]]]]  

用法:

f[{1, 2, 3, 4, 1, 4, 3, 4, 3, 5, 6, 7, 3, 2}, 3]
(*
->{1,2,3}
*)
f[{1, 2, 3, 4, 1, 4, 3, 4, 3, 5, 6, 7, 3, 2}, 5]
(*
->{1,2,3,4,1,4,3,4,3,5}
*)

如果您还想过滤大于3的值,您可以使用我的代码包装:

g[list_, item_] :=  Select[list[[1 ;; Position[list, item][[1, 1]]]], # <= 3 &]  

所以:

g[{-1, 1, 2, 5, 7, 1, 3, 4, 1, 4, 3, 4, 3, 5, 6, 7, 3, 2}, 3]
(*
->{-1,1,2,1,3}
*)