列表
产生对象列表 | 添加、删除和修改列表元素 |
将一些对象放在一起 | 列表组合 |
值表的生成 | 作为集合的列表 |
处理列表中的元素 | 重排列表 |
向量和矩阵 | 列表元素的分组和合并 |
获得列表的部分元素 | 列表中的排序 |
检测和搜索列表元素 | 嵌套列表的重排 |
在 "产生对象的列表" 节中我们已经讨论过列表,在那里是作为一种把多个数放在一起的方式. 在这一节中,将看到使用列表的许多不同方式. 用户将发现列表是 Wolfram 语言中最灵活和最强有力的对象之一. 将看到 Wolfram 语言列表是数学和计算机科学中的一些标准概念的一般化.
Wolfram 语言内部的数学函数大多被设置成 “可列表的”,使其能分别作用于列表的每一个元素. 然而,并不一定 Wolfram 语言的所有函数都能做到这一点. 除非用户专门设置. 用户引入新函数 f 把列表作为单个对象进行处理. "函数作用于表达式的部分项" 和 "结构的操作" 将介绍如何用 Map 和 Thread 使一个函数分别地作用于列表的每个元素.
可以在从 Table 中得到的列表上进行其他运算:
可以使用 Table 生成具有任意维度的数组.
Table[f,{imax}] | 给出 f 的 imax 个值的列表 |
Table[f,{i,imax}] | 给出 f 的 i 从 1 到 imax 的列表 |
Table[f,{i,imin,imax}] | 给出 i 从 imin 到 imax 的列表 |
Table[f,{i,imin,imax,di}] | 使用 di 为步长 |
Table[f,{i,imin,imax},{j,jmin,jmax},…] | 生成多维表 |
Table[f,{i,{i1,i2,…}] | 给出当 i 连续取值 i1, i2, … 时 f 的值的列表 |
TableForm[list] | 把列表显示为表格形式 |
t[[i]] or Part[t,i] | 给出 t 的 i 个子列表(也作为 t〚i〛 输入) |
t[[i;;j]] or Part[t,i;;j] | 给出从 i 到 j 的部分列表 |
t[[{i1,i2,…}]] or Part[t,{i1,i2,…}] | 给出 t 的 i1,i2,… 部分构成的列表 |
t[[i,j,…]] or Part[t,i,j,…] | 给出 t 的相应于 t[[i]][[j]]… 的部分元素列表 |
{a,b,c} | 一个列表 |
Part[list,i] or list[[i]] | 列表 list 的第 i 个元素(第一个元素为 list[[1]]) |
Part[list,{i,j,…}] or list[[{i,j,…}]] | 列表 list 的第 i,第 j,… 个元素组成的列表 |
Part[list,i;;j] | 列表 list 的第 i 到第 j 个元素组成的列表 |
Table[f,{i,n}] | 通过计算 i=1,2,…,n 时 f 的值,构造一个 n 维向量 |
Array[a,n] | 构造形如 {a[1],a[2],…} 的 n 维向量 |
Range[n] | 建立列表 {1,2,3,…,n} |
Range[n1,n2] | 建立列表 {n1,n1+1,…,n2} |
Range[n1,n2,dn] | 建立列表 {n1,n1+dn,…,n2} |
list[[i]] or Part[list,i] | 取出向量 list 的第 i 个元素 |
Length[list] | 给出 list 的元素个数 |
c v | 数乘向量 |
a.b | 向量的点积 |
Cross[a,b] | 向量的叉积(也输入为 a×b) |
Norm[v] | 向量的欧式范数(norm) |
Table[f,{i,m},{j,n}] | 通过计算 i 从 1 到 m,j 从 1 到 n 的 f 的值,构造一个 m×n 矩阵 |
Array[a,{m,n}] | 构造一个 m×n 矩阵,其第 i,j 个元素为 a[i,j] |
IdentityMatrix[n] | 生成一个 n×n 单位矩阵 |
DiagonalMatrix[list] | 生成一个对角线上的元素为 list 的对角阵 |
list[[i]] or Part[list,i] | 给出矩阵 list 的第 i 行 |
list[[All,j]] or Part[list,All,j] | 给出矩阵 list 的第 j 列 |
list[[i,j]] or Part[list,i,j] | 给出矩阵 list 的第 i,j 个元素 |
Dimensions[list] | 给出矩阵 list 的维数 |
Column[list] | 在一个列中显示 list 的元素 |
MatrixForm[list] | 用矩阵形式显示 list |
c m | 用数乘以矩阵 |
a.b | 两个矩阵的点积 |
Inverse[m] | 矩阵的逆 |
MatrixPower[m,n] | 矩阵的 n 次幂 |
Det[m] | 矩阵的行列式 |
Tr[m] | 矩阵的迹 |
Transpose[m] | 矩阵的转置 |
Eigenvalues[m] | 矩阵的特征值 |
Eigenvectors[m] | 矩阵的特征向量 |
Eigenvalues 给出矩阵的特征值:
First[list] | list的第一个元素 |
Last[list] | list 的最后一个元素 |
Part[list,n] or list[[n]] | list 的第 n 个元素 |
Part[list,-n] or list[[-n]] | 倒数第 n 个元素 |
Part[list,m;;n] | 从第 m 到第 n 个元素 |
Part[list,{n1,n2,…}] or list[[{n1,n2,…}]] | |
由第 n1, n2, … 个元素组成的列表 |
Take[list,n] | list 的前 n 个元素 |
Take[list,-n] | list 的后 n 个元素 |
Take[list,{m,n}] | list 中从 m 到 n 的元素 |
Rest[list] | 去掉 list 的第一个元素 |
Drop[list,n] | 去掉 list 的前 n 个元素 |
Most[list] | 去掉 list 的最后一个元素 |
Drop[list,-n] | 去掉 list 的后 n 个元素 |
Drop[list,{m,n}] | 去掉 list 的从第 m 到第 n 个间的元素 |
"同类列表的操作" 节将介绍如何将本节的所有函数推广到不仅用于列表,而且用于各种 Wolfram 语言表达式.
本节的函数允许用户提取列表中特定位置上的元素. "寻找与模式匹配的表达式" 节将介绍如何使用像 Select 和 Cases 这样的函数提取列表元素. 他们不是根据元素的位置,而是根据元素的特征进行提取.
Position[list,form] | form 在 list 中的位置 |
Count[list,form] | form 作为 list 的元素所给出的次数 |
MemberQ[list,form] | 检测 form 是否为 list 的元素 |
FreeQ[list,form] | 检测 form 是否不在 list 中 |
"获得列表的部分元素" 讨论如何根据元素的位置或标号提取列表的元素. Wolfram 系统也有根据元素的值搜索和检测列表元素的函数.
Prepend[list,element] | 在 list 的开头添加元素 element |
Append[list,element] | 在 list 的末尾添加元素 element |
Insert[list,element,i] | 在 list 的第 i 个位置上插入 element |
Insert[list,element,-i] | 在 list 的倒数第 i 个位置上插入 element |
Riffle[list,element] | 在 list 的位置上交错放置 element |
Delete[list,i] | 去掉 list 的第 i 个位置上的元素 |
ReplacePart[list,i->new] | 用 new 替换 list 的第 i 个位置上的元素 |
ReplacePart[list,{i,j}->new] | 用 new 替换 list[[i,j]] |
函数如 ReplacePart 用明确的列表产生新的列表. 然而,用户有时可能想要在合适的位置修改一个列表,而不明确产生一个新的列表.
m[[i,j]]=new | 替换矩阵的第 (i,j) 个元素 |
m[[i]]=new | 替换第 i 行 |
m[[All,i]]=new | 替换第 i 列 |
Join[list1,list2,…] | 把列表连接在一起 |
Union[list1,list2,…] | 列表的并(合并列表,删除重复的元素,并整理结果) |
Riffle[list1,list2] | 交错放置 list1 和 list2 的元素 |
Join 可以连接任意多个列表:
Union 合并列表,且保持列表中只有不同元素:
Riffle 通过交错放置列表的元素合并列表:
Union[list1,list2,…] | 给出 listi 中不同元素的列表 |
Intersection[list1,list2,…] | 给出 listi 中共有的元素的列表 |
Complement[universal,list1,…] | 给出在 universal 中,但不在 listi 中的元素的列表 |
Subsets[list] | 给出 list 中元素的所有子集的列表 |
DeleteDuplicates[list] | 从 list 中删除所有重复元素 |
Union 给出在任一个列表中出现的元素:
Intersection 给出在所有集合中都出现的元素:
Complement 给出在第 1 个集合出现,而不在其他集合中出现的元素:
DeleteDuplicates 从列表中删除所有重复元素:
Sort[list] | 把列表 list 元素整理成标准顺序 |
Union[list] | 整理元素,删除重复元素 |
Reverse[list] | 对 list 的元素进行反向排序 |
RotateLeft[list,n] | 把列表 list 元素向左轮换 n 个位置 |
RotateRight[list,n] | 把列表元素向右轮换 n 个位置 |
可以通过给出负位移或使用 RotateRight 进行向右轮换:
Partition[list,n] | 把 list 分成 n 个元素一组 |
Partition[list,n,d] | 使用偏移 d 进行逐次分组 |
Split[list] | 把 list 按邻接的相同元素进行分组 |
SplitBy[list,f] | 当应用 f 时,将 list 分为具有相同值得参数运行 |
Gather[list] | 将 list 的参数收集到相同参数的子列表中 |
GatherBy[list,f] | 当应用 f 时,将列表的参数收集到具有相同值的子列表中 |
Sort[list] | 把 list 中的元素按顺序排列 |
Ordering[list] | Sort[list] 中 list 元素的位置 |
Ordering[list,n] | Ordering[list] 的前 n 个元素 |
Ordering[list,-n] | Ordering[list] 的最后 n 个元素 |
Permutations[list] | list 的所有可能排序 |
Min[list] | list 中的最小元素 |
Max[list] | list 中的最大元素 |
与 Sort[t] 产生相同的结果:
Flatten[list] | 压平 list 的所有层 |
Flatten[list,n] | 压平 list 的前 n 层 |
Partition[list,{n1,n2,…}] | 分成大小为 n1×n2×… 的块 |
Transpose[list] | 交换列表的前两层 |
RotateLeft[list,{n1,n2,…}] | 将层逐次轮换 ni 个位置 |
PadLeft[list,{n1,n2,…}] | 把第 i 层填充为长为 ni 的子列表 |
对嵌套列表还有许多其他运算. 在 "操作列表" 中将讨论更多操作.