Pick
更多信息
- sel 可以是任意长度的嵌套列表.
- Pick[list,sel,patt] 选取 list[[i1,i2,…]] 中的元素,其对应于 sel[[i1,i2,…]] 中的元素匹配 patt.
- 根据嵌套列表 sel 中元素匹配 patt 的顺序,Pick 可能返回一个不规则的列表.
- list 和 sel 中的头部不一定是 List.
- Pick 对 SparseArray 对象起作用.
- 若 sel 是一个类型为 "BitVector" 的 DataStructure 对象,则 Pick[list,sel] 会提取 list 中与 sel 中值为 1 的位相对应的元素. »
- Parallelize[Pick[list,sel]] 在所有子核上并行计算 Pick[list,sel]. »
范例
打开所有单元 关闭所有单元基本范例 (2)
范围 (5)
把对应于“选择器”列表中 True 的元素挑选出来:
Pick[{a, b, c, d}, {True, False, False, True}]Pick[{a, b, c, d}, {1, 2, 3, 4}, 2 | 4]用 SparseArray 来选则参数:
sel = SparseArray[{1 -> True, 100 -> True, _ -> False}, 100]Pick[Range[100], sel]从 SparseArray 中选取元素:
data = SparseArray[{{1, 3} -> 2, {2, 2} -> 3, {3, 3} -> 5}]Pick[data, IdentityMatrix[3], 1]创建一个类型为 "BitVector"、长度为五的数据结构:
ds = CreateDataStructure["BitVector", 5];将其第二和第四位设为 1,注意它是从 0 而非 1 开始索引的:
ds["BitSet", 1];
ds["BitSet", 3]Pick[{a, b, c, d, e}, ds]推广和延伸 (3)
应用 (1)
将 Pick 应用于由 True 和 False 组成的列表:
selector = RandomChoice[{True, False}, 10 ^ 7];
data = Range[10 ^ 7];
AbsoluteTiming[pick = Pick[data, selector];]用对应的 DataStructure 来完成同样的运算要快的多:
ds = CreateDataStructure["BitVector", selector];
AbsoluteTiming[pick2 = Pick[data, ds];]pick === pick2属性和关系 (3)
Pick[list,sel,patt] 中的比较是结构上的比较,和标头无关:
sel = {1, Cos[1], Sin[1]};
list = {a, b, f[b]};
Pick[list, sel, 1]f[b] 被选中,因为 sel 的 3,1 元素和 patt 匹配:
sel[[3, 1]]list[[3, 1]]sel[[2, 1]]list[[2, 1]]并行计算 Pick:
Parallelize[Pick[{a, b, c, d}, {1, 0, 1, 1}, 1]]如果 sel 是一个位元向量,则 Pick[list,sel] 会提取 list 中与 sel 中值为 1 的位相对应的元素:
Pick[{a, b, c, d, e}, DataStructure["BitVector", {"Data" -> ByteArray["Cg=="], "Capacity" -> 5, "BitCount" -> 2}]]DataStructure["BitVector", {"Data" -> ByteArray["Cg=="], "Capacity" -> 5, "BitCount" -> 2}]["Boole"]//Normal可能存在的问题 (4)
Pick[{a, b, c, d}, {True, False}]Pick 中允许有原子型表达式:
Pick[x, {1, 2, 3}, _List]MatchQ[{1, 2, 3}[[]], _List]x[[]]如果有原子型参数,却没有被完全取出,则返回Sequence[]:
Pick[x, {1, 2, 3}, _ ? NumericQ]Pick[{1, 2, 3}, False]在第三个参变量中使用 Except[c] 可能导致不期望的结果:
Pick[{a, b, c, d, e}, {1, 0, 1, 0, 0}, Except[1]]MatchQ[{1, 0, 1, 0, 0}, Except[1]]使用 Except[c,p] 限制模式为选择参数的元素:
Pick[{a, b, c, d, e}, {1, 0, 1, 0, 0}, Except[1, _Integer]]list = {1, x + y + z};
selector = {1, x + 2};
Pick[list, selector, _Integer]预先进行检测使得列表中只含有 True 和 False 以避免出现结构上的问题:
newSelector = Map[MatchQ[#, _Integer]&, selector]Pick[list, newSelector]技术笔记
-
▪
- 构建列表
历史
2004年引入 (5.1) | 在以下年份被更新:2025 (14.3)
文本
Wolfram Research (2004),Pick,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Pick.html (更新于 2025 年).
CMS
Wolfram 语言. 2004. "Pick." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2025. https://reference.wolfram.com/language/ref/Pick.html.
APA
Wolfram 语言. (2004). Pick. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Pick.html 年
BibTeX
@misc{reference.wolfram_2026_pick, author="Wolfram Research", title="{Pick}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/Pick.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_pick, organization={Wolfram Research}, title={Pick}, year={2025}, url={https://reference.wolfram.com/language/ref/Pick.html}, note=[Accessed: 03-November-2026]}