Extract
更多信息
- 对于整数 i, j, …,Extract[expr,{i,j,…}] 等价于 Part[expr,i,j,…]. »
- Extract 使用的位置指定与 Position 返回的并在 MapAt 等函数中使用的位置指定具有相同的形式. »
- 单个位置规约 pos 也可以是更一般的通式 {part1,part2,…},其中 parti 是 Part 规约,例如 i, All 或 Span[…]. »
- 提取一个层上多个部分的指定将保留该层的标头. »
- 您可以使用 Extract[expr,…,Hold] 不通过求值来提取各个部分. »
- 若 expr 为 SparseArray 对象或结构化数组,则 Extract[expr,…] 提取对应普通数组中的部分. »
- Extract 作用于 Association 对象,使用与 Part 中的键值相同的指定. »
- Extract[pos][expr] 等价于 Extract[expr,pos].
范例
打开所有单元 关闭所有单元基本范例 (5)
Extract[{1, 2, 3, 4}, {2}]Extract[{2}][{a, b, c, d}]Extract[f[g[1, 2], h[3]], {1, 2}]Extract[f[g[1, 2], h[x ^ 2]], {{1, 2}, {2, 1, 1}}]Extract[(| | | |
| - | - | - |
| a | b | c |
| d | e | f |
| g | h | i |), {All, 2}]提取 Position 给定的部分:
e = f[g[1, 2], {h[3]}];p = Position[e, _Integer]Extract[e, p]范围 (25)
比较单一位置和多个位置 (5)
Extract[{a, b, c, d, e}, {3}]Extract[{a, b, c, d, e}, {{1}, {4}, {3}}]mat = Array[a, {3, 3}];Extract[mat, {1, 3}]Extract[mat, {{1}, {3}}]Extract[mat, {{1, 3}}]Extract[mat, {{1, 2}, {3, 3}, {2, 1}}]提取规则的右侧并将结果封装在 Hold 中以阻止计算:
Extract[x :> 1 + 1, {2}, Hold]从列表中提取多个部分,并将每个部分包装在 Hold 中:
Extract[{a, b, c, d, e}, {{1}, {2}, {5}}, Hold]包括所有的格式 (5)
m = (| | | |
| - | - | - |
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |);Extract[m, {2}]Extract[m, {2, All}]Extract[m, {All, 2}]Extract[m, {All, {1, 3}}]%//MatrixFormExtract[m, {{All, 1}, {All, 3}}]%//MatrixFormrules = {{a -> 1, b -> 2}, {c -> 3, d -> 4, e -> 5}, {f -> 6}};Extract[rules, {All, 1}]Extract[rules, {2, All, 2}]Extract[rules, {All, All, 1}]使用 All 提取保留该层的头部:
Extract[e[f[1, 2, 3], g[4, 5, 6], h[7, 8, 9]], {All, 1}]提取列表的所有右侧规则,避免使用 Hold 求值::
Extract[{a :> (1/0), b :> ArcTan[0, 0], c :> Print[5]}, {All, 2}, Hold]没有 Hold 的情况下,该表达式将进行计算并产生其他反应:
Extract[{a :> (1/0), b :> ArcTan[0, 0], c :> Print[5]}, {All, 2}]分别提取规则列表中的两侧,将两个结果封装在 HoldComplete 中:
Extract[{a :> (1/0), b :> ArcTan[0, 0], c :> Print[5]}, {{All, 1}, {All, 2}}, HoldComplete]关联关系 (6)
Extract[<|expr -> 1, "str" -> 2|>, {Key[expr]}]若键为字符串,则 Key 封装器为可选:
Extract[<|expr -> 1, "str" -> 2|>, {"str"}]Extract[<|2 -> 1 + x ^ 2, 3 -> y ^ 2 - 1, 1 -> x + y + z|>, {Key[1]}]Extract[<|2 -> 1 + x ^ 2, 3 -> y ^ 2 - 1, 1 -> x + y + z|>, {1}]Extract[<|2 -> 1 + x ^ 2, 3 -> y ^ 2 - 1, 1 -> x + y + z|>, {{1}, {Key[1]}}]Extract[<|2 -> 1 + x ^ 2, 3 -> -1 + y ^ 2, 1 -> x + y + z|>, {Key[3], 1}]Extract[<|2 -> 1 + x ^ 2, 3 -> -1 + y ^ 2, 1 -> x + y + z|>, {{Key[3], 1}, {3, 1}}]Extract[<|"a" :> 1 / 0, "b" :> Log[0]|>, {{"a"}, {"b"}}, Hold]在没有 Hold 的情况下,关联中的值将进行计算并生成消息:
Extract[<|"a" :> 1 / 0, "b" :> Log[0]|>, {{"a"}, {"b"}}]特殊数组类型 (3)
若 expr 为稀疏数组,则 Extract[expr,…] 提取相应普通数组中的部分:
sparse = SparseArray[{{1, 3} -> 1, {2, 2} -> 2, {3, 1} -> 3}, {3, 3}]Extract[sparse, {2, 2}]子数组作为 SparseArray 对象返回:
Extract[sparse, {All, 2}]sparse = SparseArray[{{1, 3} -> 1, {2, 2} -> 2, {3, 1} -> 3}, {3, 3}]Extract[sparse, {All, {1, 3}}]%//NormalExtract[sparse, {{All, 1}, {All, 3}}]%//NormalQuantityArray[{{1, 2}, {3, 4}, {5, 6}}, {"Meters", "Seconds"}]Extract[%, {1, 1}]SymmetrizedArray[{{1, 1} -> 3, {2, 2} -> 1, {3, 1} -> -5}, {3, 3}, Symmetric[All]]Extract[%, {1}]空间和子列表 (6)
Extract[Range[10], {3 ;; 5}]Extract[{a, b, c, d, e, f}, {1 ;; -1 ;; 2}]Extract[f[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], {-1 ;; 1 ;; -3}]Extract[{{1, 2}, {3, 4, 5}}, {All, 1 ;; 2}]Extract[{{1, 2}, {3, 4, 5}}, {All, {1, -1}}]m = Array[a, {5, 5}];Extract[m, {2 ;; 4, 1}]Extract[m, {{1, 3, 4}, 2}]Extract[m, {-2 ;; -1, {1, 2, 5}}]Extract[m, {All, {1, 5}}]Extract[{a :> 1 ^ 2, b :> 2 ^ 2, c :> 3 ^ 3}, {1 ;; 2, 2}, Hold]属性和关系 (6)
若 pos 不是列表,则 pos 和 {pos} 为等价规约:
Extract[Range[10], 3] == Extract[Range[10], {3}]Extract[Range[10], 3 ;; 5] == Extract[Range[10], {3 ;; 5}]对于一列整数 {i,j,…},Extract[expr,{i,j,…}] 等价于 Part[expr,i,j,…]:
Extract[{ArcTan[f[x], g[y]]}, {1, 2, 1}] === Part[{ArcTan[f[x], g[y]]}, 1, 2, 1]Extract[expr,{{i1,i2,…},{j1,j2,…},…}] 等价于 {Part[expr,i1,i2,…],Part[expr,j1,j2,…],…}:
m = RandomReal[1, {3, 3}];
Extract[m, {{1 ;; 2, 1}, {2 ;; 3, 2}}] === {Part[m, 1 ;; 2, 1], Part[m, 2 ;; 3, 2]}Extract[m, {}] === {}expr = {{a, b, c}, {c, {a}, d}, {{e}, a, f}};Position[expr, a]Extract[expr, %]在 Extract[expr,{pos1,pos2,…},h] 中,h 封装每个 posi 的提取结果:
expr = Partition[Range[9], 3]Extract[expr, {{1, 1}, {All, 3}}, h]Extract[expr, {All, 1}, h]expr = f[{1, 2}, {3, 4, 5}, {6}, {7, 8, 9, 10}];Extract[expr, {All, 1}]Extract[expr, {1 ;; 3, 1}]Extract[expr, {{2, 4}, 1}]可能存在的问题 (2)
Extract[expr,{}] 返回子表达式的空字符串,因为位置列表是空的:
Extract[h[a, b], {}]Extract[expr,{{}}] 提取位置 {} 处的子表达式,为整个表达式:
Extract[h[a, b], {{}}]arr = Array[a, {2, 4}];Extract[arr, {{1, 2}}]因此,在 Part 中等效的规范可能会被 Extract 区别对待:
Part[arr, {1, 2}] === Part[arr, 1 ;; 2]Extract[arr, {{1, 2}}] === Extract[arr, {1 ;; 2}]如果需要 Part 和 Extract 保持一致,请使用一列列表并在末尾删除额外的列表:
First@Extract[arr, {{{1, 2}}}] === First@Extract[arr, {{1 ;; 2}}]技术笔记
-
▪
- 通过索引操作列表
历史
1996年引入 (3.0) | 在以下年份被更新:2003 (5.0) ▪ 2012 (9.0) ▪ 2014 (10.0) ▪ 2021 (13.0)
文本
Wolfram Research (1996),Extract,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Extract.html (更新于 2021 年).
CMS
Wolfram 语言. 1996. "Extract." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2021. https://reference.wolfram.com/language/ref/Extract.html.
APA
Wolfram 语言. (1996). Extract. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Extract.html 年
BibTeX
@misc{reference.wolfram_2026_extract, author="Wolfram Research", title="{Extract}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/Extract.html}", note=[Accessed: 10-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_extract, organization={Wolfram Research}, title={Extract}, year={2021}, url={https://reference.wolfram.com/language/ref/Extract.html}, note=[Accessed: 10-September-2026]}