Part

expr[[i]]Part[expr,i]

给出 expr 的第 i 个元素.

expr[[-i]]

从末端开始统计.

expr[[i,j,]]Part[expr,i,j,]

等价于 expr[[i]][[j]].

expr[[{i1,i2,}]]

给出 expr 的第 i1i2个元素组成的列表.

expr[[m;;n]]

给出从第 m 到第 n 个的元素.

expr[[m;;n;;s]]

给出从第 m 到第 n 个的元素,步长为 s.

expr[["key"]]

给出关联 expr 中与 "key" 相关联的值.

expr[[Key[k]]]

给出关联 expr 中与任意键 k 相关联的值.

更多信息

  • 可以用类似 t[[spec]]=value 的赋值来修改表达式中的任意元素或元素序列. »
  • 一个表达式的 part 0 是它的标头. »
  • 常见的元素范围指定包括:
  • expr[[m;;]]从第 m 个元素到结尾
    expr[[;;n]]从开始到第 n 个元素
    expr[[;;,j]]j
    expr[[m1;;n1,m2;;n2]]子矩阵
  • expr 是一个列表,expr[[{i1,i2,}]] 给出子列表. 通常情况下, expr 的标头被应用到子列表上. »
  • 可以从 expr[[list1,list2,]] 中得到一个嵌套的子列表. 每个子列表都有一个指针.
  • 如果有任何 listiAll;;,则包含该层的所有元素组成的列表. »
  • 注意在 Part 中使用的列表和在 ExtractMapAt Position 中的函数是不同.
  • 如果 expr 是一个 SparseArray 对象或结构化数组,如 QuantityArraySymmetrizedArrayexpr[[]] 给出相应普通数组中的部分. »
  • 格式 expr[["key"]] 可用于从键值是字符串的相关性中提取数值. expr[[Key[k]]] 可用于提取具有任意键值的数值.
  • "key"Key[k] 可以出现在部分指定的任何位置.
  • StandardFormInputForm 中,expr[[spec]] 可以输出为 exprspec.
  • 可以输入为 [[]]\[LeftDoubleBracket]\[RightDoubleBracket].
  • StandardForm 中,expr[[spec]] 可以输入为 expr[[spec]]exprspec.

背景

  • Part 是一个关于结构的函数,它给出一个表达式指定指标的分部. 表达式 Part[expr,i] 通常用简化语法表示为 expr[[i]]expri 的形式. Part 可被用于挑出列表的分部、分部的序列、矩阵中的元素、矩阵的行和列等等. Part 可通过 Set 对表达式的分部赋值,比如 list[[k]]=newValue.
  • 虽然 Part 最常见是用在列表中,但其实它适用于任何类型的表达式. 当使用 Part 时,可以用索引、索引的列表、 Span 表达式或 All 来指定表达式的分部.
  • 实现 Part 的一些常见特例情形的有用的函数包括 FirstLastTakeDropRestMost. Position 可被用于在表达式中找出指定内容出现的位置. Extract 是一个更专门的函数,它会提取出一个表达式中由列表指定的位置上的分部,而类似的函数 Delete 可以从指定位置移除元素.
  • 有少量函数,其包含的分部不能用 Part 或相关函数访问或分割为子表达式. 最常见的例子是 ComplexRational,举例来说 Complex[1,2] 是像 1+2 这样的数的内部表示而 Rational[1,2] 是像 1/2 这样的数的内部表示. 有这样性质的函数被称为是原子的,当它们被 AtomQ 作用时返回 True.

范例

打开所有单元关闭所有单元

基本范例  (6)

提取列表的部分元素:

获取列表倒数第二个元素:

提取元素序列:

指定提取与键 "a" 对应的关联的值:

对一个元素重新赋值:

Part 适用于任意表达式,不只是列表:

Part 总是对 FullForm 形式的表达式进行运算:

范围  (23)

单级指定  (7)

选择几个元素,标头不变:

获取一组元素,其中包括重复的元素:

第 1 个元素到倒数第 3 个元素:

更简短的记法:

第 1 个元素到倒数第 3 个元素,间隔为 2:

从开头提取,间隔为 2:

Association 对象的第一个部分:

与键 1 关联的值:

连续提取关联的值:

提取多个键对应的值:

多层指定  (7)

提取矩阵的部分元素:

可以理解成先提取中间一行的元素:

然后提取该行的第三列的元素:

矩阵的第二列:

提取第 1 行和第 3 行:

提取第 1 行和第 3 行的第 2 个和第 3 个元素:

从关联中提取子表达式:

提取几个子表达式:

混用基于 Key 和通过数字索引进行提取的方式:

提取任意表达式的深层元素:

对于 SparseArray 对象,Part 给出对应的普通数组中的元素:

用稀疏向量表示行或列:

还可以设定元素的值:

对于结构化数组,Part 给出对应的普通数组中的元素:

QuantityArray 中的元素为带有单位的 Quantity 对象:

如果提取出来的部分仍然是数组,将保留其标头:

赋值  (5)

为嵌套元素重新赋值:

为一系列元素重新赋值:

一次为多个元素赋值:

将第 2 个第 3 个元素赋值为 x

为第 1、3 和第 4 个元素赋不同的值:

所有的标准赋值操作都适用于 part:

通过重新对元素赋值来重新排列元素:

输入格式  (4)

FullForm 格式输入:

FullForm 输入 Span 指定:

[[]] 输入:

以下标输入:

使用特殊字符 \[LeftDoubleBracket]\[RightDoubleBracket]

应用  (6)

从方程中选取第一个解:

选取一元方程的所有解:

在前 1000 个素数中,统计多少位于每个可能的 mod 10 bin 中:

获得相同结果的另一个方式:

应用一个排列:

反转排列:

InversePermutation 直接计算来验证上述结果:

通过偏移为 1 的 Mod 循环提取元素:

属性和关系  (10)

表达式的第零个元素是它的标头:

当使用一组元素指定时,将保留原始表达式中的标头:

即便是多层指定,也是如此:

Part[expr,{}] 给出 Head[expr][]

键为字符串时,Key["key"]"key" 等价:

对于一般的键不成立:

Part[expr] 给出 expr

对元素 0 赋值实际上是 Apply 的另一种形式:

@@ (Apply) 执行同样的操作:

Part[expr,m;;n] 实际上等价于 Take[expr,{m,n}]

同样,Part[expr,m;;n;;s] 实际上等价于 Take[expr,{m,n,s}]

Part[expr,i,j,] 实际上等价于 Extract[expr,{i,j,}]

Part 可提取方阵:

Extract 可返回任意位置上的元素序列:

PermutePart 以不同的方式解释置换:

两种解释之间的关系为 InversePermutation

可能存在的问题  (5)

Position 并不返回形式上的子列表指定,该指定可以通过 Part 快速使用:

ExtractPosition 返回的内容指定子列表:

当使用列表指定元素时,相邻元素的提取不总是与直接提取等价:

如果表达式包含保持部分,提取可能使它们开始计算:

这可能导致直接部分提取和连续部分提取之间的差异:

仅有存在的子列表可以重新赋值:

创建一个值是大型矩阵的共享变量:

访问其元素导致整个矩阵重复转移到子内核:

使用 Unevaluated 允许共享变量部分的特殊代码可以看见变量:

Wolfram Research (1988),Part,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Part.html (更新于 2014 年).

文本

Wolfram Research (1988),Part,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Part.html (更新于 2014 年).

CMS

Wolfram 语言. 1988. "Part." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2014. https://reference.wolfram.com/language/ref/Part.html.

APA

Wolfram 语言. (1988). Part. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Part.html 年

BibTeX

@misc{reference.wolfram_2024_part, author="Wolfram Research", title="{Part}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/Part.html}", note=[Accessed: 21-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_part, organization={Wolfram Research}, title={Part}, year={2014}, url={https://reference.wolfram.com/language/ref/Part.html}, note=[Accessed: 21-November-2024 ]}