Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wolfram mathematica 从嵌套列表中快速提取元素_Wolfram Mathematica - Fatal编程技术网

Wolfram mathematica 从嵌套列表中快速提取元素

Wolfram mathematica 从嵌套列表中快速提取元素,wolfram-mathematica,Wolfram Mathematica,这是Mathematica中关于列表操作的一个基本问题。 我有一个很大的列表,其中每个元素都有以下示意图形式:{List1,List2,Number}。例如 a={{{1,2,3},{1,3,2},5},{1,4,5},{1,0,2},10},{4,5,3},{8,3,4},15} 我想制作一个新的列表,它只包含每个子列表中的一些部分。例如,从每个子列表中选出第三个元素,从上面给出{5,10,15}。或者删除第三个元素以返回{{1,2,3}、{1,3,2}、{1,4,5}、{1,0,2}、{4,

这是Mathematica中关于列表操作的一个基本问题。 我有一个很大的列表,其中每个元素都有以下示意图形式:{List1,List2,Number}。例如

a={{{1,2,3},{1,3,2},5},{1,4,5},{1,0,2},10},{4,5,3},{8,3,4},15}

我想制作一个新的列表,它只包含每个子列表中的一些部分。例如,从每个子列表中选出第三个元素,从上面给出{5,10,15}。或者删除第三个元素以返回{{1,2,3}、{1,3,2}、{1,4,5}、{1,0,2}、{4,5,3}、{8,3,4}

我可以通过使用table命令构建新列表来实现这一点,例如

Table[a[[i]][[3]],{i,1,Length[a]}

但我想知道是否有一种更快的方法可以处理大的列表

您可以使用
零件
(简写
[[…])
来实现以下目的:

a[[All, 3]]

a[[All, {1, 2}]]

在Mathematica版本5及更高版本中,可以通过多种方式使用关键字All来指定列表遍历

例如,您可以编写

a[[All,3]]
这里,Mathematica将第一维度的所有可接受指数转换为所有可接受指数,然后取下一维度的第三个指数

这样做通常比使用Mathematica编程语言进行循环更有效。对于同质列表来说,这是非常好的,因为您想要挑选或扫描的内容总是存在的

另一种有效的表示法和快捷方式是;;语法:

a[[ All, 1 ;; 2]]
将扫描a的第一级,并获取每个子列表的第一个到第二个元素的所有内容,与第二个案例完全相同

事实上,所有的;;可以组合到任意数量的级别;;甚至可以以类似于Mathematica中任何迭代器的方式使用:

a[[ start;;end;;step ]]
将做与相同的事情

Table[ a[[i]], {i,start,end,step}]
您可以省略start、end或step中的一个,默认值为1、Length[(隐式列表的)]和1

您可能希望在Mathematica的帮助中查找的另一个内容是和,它允许结构化表达式的编程替换。有效地使用它的关键是,在ReplacePart中,您可以使用它来指定要替换的对象的坐标,并且可以定义应用于这些对象的函数

以您的数据为例

ReplacePart[a, {_, 3} -> 0]
将每个子列表的第三部分替换为0

ReplacePart[a, {i : _, 3} :> 2*a[[i, 3]]]

将使每个子列表的每三部分翻倍。

正如作者所建议的,基于部分的方法需要格式良好的数据,但案例是为列表的稳健分离而构建的:

用你的a,

a = {{{1, 2, 3}, {1, 3, 2}, 5}, {{1, 4, 5}, {1, 0, 2}, 
10}, {{4, 5, 3}, {8, 3, 4}, 15}};

Cases[a,{_List,_List,n_}:>n,Infinity]

{5, 10, 15}
记录的其他部分可以通过类似的形式提取

基于零件的方法将阻塞格式错误的数据,如:

badA = {{{1, 2, 3}, {1, 3, 2}, 5}, {{1, 4, 5}, {1, 0, 2}, 
10}, {{4, 5, 3}, {8, 3, 4}, 15}, {baddata}, {{1, 2, 3}, 4}};

badA[[All,3]]

{{{1, 2, 3}, {1, 3, 2}, 5}, {{1, 4, 5}, {1, 0, 2},
10}, {{4, 5, 3}, {8, 3, 4}, 15}, {baddata}, {{1, 2, 3},
4}}[[All, 3]]
,但案例将跳过垃圾,只对符合要求的数据进行操作

Cases[badA, {_List, _List, s_} :> s, Infinity]

{5, 10, 15}
嗯,


弗雷德·克林格纳

谢谢;这就是我要找的。请注意,如需进一步的问题,您也可以在