TakeSmallestBy[data,f,n]
给出 data 中使 f[ei] 最小的 n 个元素 ei,按升序排列.
TakeSmallestBy[dataprop,f,n]
给出 data 中使 f[ei] 最小的 n 个元素的属性 prop.
TakeSmallestBy[data,f,n,p]
用排序函数 p 进行排序.
TakeSmallestBy[f,n]
表示可应用于表达式的 TakeSmallestBy 的算符形式.
TakeSmallestBy
TakeSmallestBy[data,f,n]
给出 data 中使 f[ei] 最小的 n 个元素 ei,按升序排列.
TakeSmallestBy[dataprop,f,n]
给出 data 中使 f[ei] 最小的 n 个元素的属性 prop.
TakeSmallestBy[data,f,n,p]
用排序函数 p 进行排序.
TakeSmallestBy[f,n]
表示可应用于表达式的 TakeSmallestBy 的算符形式.
更多信息和选项
- TakeSmallestBy 给出输入数据第一层中与最小的 f[ei] 值对应的元素 ei.
- 默认情况下,TakeSmallestBy 用 NumericalOrder 对结果为数值表达式、Quantity 对象和 DateObject 表达式的 f[ei] 值进行排序. 对于其他类型的对象,TakeSmallestBy 按标准 Order 对 f[ei] 值进行排序.
- data 可采用以下形式:
-
{e1,e2,…} 值的列表,包括数字、量、日期、... Association[…] 值的关联 » QuantityArray[…] 量值数组或其他结构化数组 Tabular[…] 类型一致的表格数据 » TabularColumn[…] 类型一致的列数据 » Dataset[…] 普通的层次化数据 » - TakeSmallestBy[assoc,f,n] 给出长度为 n 的关联,这些关联为 assoc 中使 f 最小的值,并保留它们的键.
- 对于表格数据 tab,TakeSmallestBy[tab,f,…] 将函数 f 应用于 tab 的各个行,如果 tab 有列键,则行作为关联 <|col1val1,…|>,如果 tab 没有列键,则行作为 {val1,…} 列表.
- 在 TakeSmallestBy[dataprop,f,n] 中,prop 可能的形式包括:
-
"Element" 给出每个元素自身 » "Index" 给出每个元素的索引 » "Value" 给出每个元素 x 的值 f[x] » {prop1,prop2,…} 多种形式的列表 » All 给出由元素、索引和 f 值组成的关联 » - TakeSmallestBy[data,f,UpTo[n]] 取 n 个元素,或尽可能多的元素. »
- TakeSmallestBy[f,n][data] 等价于 TakeSmallestBy[data,f,n].
- TakeSmallestBy 具有选项 ExcludedForms. 采用默认设置 ExcludedForms->Automatic,TakeSmallestBy 会排除使 f[ei] 为 None、Null、Indeterminate 或标头为 Missing 的元素. »
- 设置 ExcludedForms->{patt1,patt2,…} 指定应将使 f[ei] 与 patti 匹配的表达式从 TakeSmallestBy 生成的结果中排除. »
范例
打开所有单元 关闭所有单元基本范例 (5)
TakeSmallestBy[{-5, -2, 4, 3, 1, 9, 2, -4}, Abs, 4]TakeSmallestBy[{"x", "xxx", "xx"}, StringLength, 2]利用 TakeSmallestBy 的运算符形式完成同样计算:
{"x", "xxx", "xx"}//TakeSmallestBy[StringLength, 2]TakeSmallestBy[StringLength, 2][{"x", "xxx", "xx"}]根据其到
的距离取最小的三个长度 Quantity:
TakeSmallestBy[{Quantity[0.6, "Meters"], Quantity[0.1, "Meters"], Quantity[0.3, "Meters"], Quantity[0.2, "Meters"]}, Abs[# - Quantity[0.5, "Meters"]]&, 3]提取该月中日期最小的三个 DateObject 表达式:
RandomDate[8]TakeSmallestBy[%, #["Day"]&, 3]TakeSmallestBy[<|a -> "x", b -> "xxx", c -> "xx"|>, StringLength, 2]范围 (8)
给出最接近零的四个数字,如果少于四个,则给出尽可能多的数字:
TakeSmallestBy[{-5, 7, 4}, Abs, UpTo[4]]planets = PlanetData[]Map[EntityProperty["Planet", "DiscoveryDate"], planets]默认情况下,如果由选择函数返回,则 Missing[] 和其他几个符号表达式将被排除:
TakeSmallestBy[planets, EntityProperty["Planet", "DiscoveryDate"], UpTo[3]]list = {-E^π, 7 π + (I/100), π^E, 23 I};TakeSmallestBy[list -> "Element", Abs, 2]TakeSmallestBy[list -> "Index", Abs, 2]TakeSmallestBy[list -> "Value", Abs, 2]TakeSmallestBy[list -> {"Element", "Index"}, Abs, 2]TakeSmallestBy[list -> {"Index", "Element"}, Abs, 2]获取包含元素、位置和 Abs 值的关联,其中元素是列表中绝对值最小的两个元素:
TakeSmallestBy[list -> All, Abs, 2]words = {"potato", "dream", "sound", "house"};使用 WordTranslation 把它们翻译成西班牙语,该函数会将各个单词可能的译法用列表形式给出:
EnglishToSpanish[word_] := First@WordTranslation[word, "English" -> "Spanish"]Map[EnglishToSpanish, words]TakeSmallest[words, 2]TakeSmallestBy[words, EnglishToSpanish, 2]TakeSmallestBy[words -> {"Element", "Value"}, EnglishToSpanish, 2]构造一个包含 100 个单词的 TabularColumn 对象:
col = TabularColumn[RandomWord[100]]TakeSmallestBy[col, StringLength, 5]Normal[%]查找 Tabular 对象给定列中值最小的四行:
data = {{8, 13, 18, 8, 14, 13, 18, 27}, {16.1, 29.2, 23.8, 14.7, 30.1, 27.5, 35.1, 36.2}};
tab = ToTabular[data, "Columns", {"size", "length"}]TakeSmallestBy[tab, "length", 4]TakeSmallestBy[tab, #length&, 4]TakeSmallestBy[tab, (#length - #size)&, 4]dataset = Dataset[ExampleData[{"Dataset", "Planets"}], MaxItems -> 4]TakeSmallestBy[dataset, Length[#Moons]&, 3]//Keysvectors = RandomInteger[{-10, 10}, {5, 3}]Norm /@ vectorsTakeSmallestBy[vectors, Norm, 3]TakeSmallestBy[vectors, Norm, 3, Order]选项 (2)
ExcludedForms (2)
planets = PlanetData[]找到目前距离您所在位置最近的四颗行星,距离下限为 0.1 天文单位(以排除所在行星):
close = TakeSmallestBy[planets, AstroDistance, 4, ExcludedForms -> _ ? (LessThan[Quantity[0.1, "AstronomicalUnit"]])]distances = Table[{date, AstroDistance[p, date]}, {p, close}, {date, DateRange[Now - Quantity[1, "Years"], Now + Quantity[1, "Years"], Quantity[1, "Weeks"]]}];DateListPlot[distances, PlotLegends -> close]assoc = <|"a" -> 1, "c" -> 2, "d" -> None, "e" -> 3|>keys = {"a", "b", "c", "d", "e", "f"};Lookup[assoc, keys]TakeSmallestBy[keys, Lookup[assoc, #]&, UpTo[4]]默认情况下,一些符号对象(如 Missing[] 或 None)被排除在选择函数的结果之外,因此前面的结果与下面等同:
TakeSmallestBy[{"a", "b", "c", "d", "e", "f"}, Lookup[assoc, #]&, UpTo[4], ExcludedForms -> {_Missing, None}]TakeSmallestBy[{"a", "b", "c", "d", "e", "f"}, Lookup[assoc, #]&, UpTo[4], ExcludedForms -> {}]指定仅应排除值 None:
TakeSmallestBy[{"a", "b", "c", "d", "e", "f"}, Lookup[assoc, #]&, UpTo[4], ExcludedForms -> {None}]应用 (6)
TakeSmallestBy[EntityValue[EntityClass["AdministrativeDivision", "ContinentalUSStates"], "CapitalCity"], GeoDistance[Entity["City", {"KansasCity", "Missouri", "UnitedStates"}], #]&, 8]GeoGraphics[{GeoPath[{Entity["City", {"KansasCity", "Missouri", "UnitedStates"}], #}]& /@ %, Red, PointSize[Large], Point[%]}, GeoRange -> "Country"]TakeSmallestBy[EntityList@EntityClass["Movie", "JamesBondFranchise"], EntityProperty["Movie", "ReleaseDate"], 5]TakeSmallestBy[EntityClass["Country", All]["Name"], StringLength, 10]TakeSmallestBy[EntityList[EntityClass["Country", "BRICCountries"]], GeoDistance[#, Here]&, 1]TakeSmallestBy[EntityValue[EntityClass["AdministrativeDivision", "AllUSStatesPlusDC"], EntityProperty["AdministrativeDivision", "BorderingStates"], "EntityAssociation"], Length, 7]TakeSmallestBy[ConstellationData[] -> All, Length @* EntityProperty["Constellation", "BrightStars"], 5]属性和关系 (3)
TakeSmallestBy[list,f,n,p] 实际上等价于 Part[list,TakeSmallest[Map[f,list]"index",n,p]]:
list = {8, 6, -7, 10, 7, 2, -9, 1};TakeSmallestBy[list, Abs, 4]Part[list, TakeSmallest[Map[Abs, list] -> "Index", 4]]默认情况下,TakeSmallestBy[{e1,e2,…},f,n] 使用 NumericalOrder 比较 f[ei] 的值:
data = {{1, x}, {0, x}, {-Infinity, x}};TakeSmallestBy[data, First, 2]Sort[First /@ data, NumericalOrder]默认情况下,MinimalBy[{e1,e2,…},f,n] 用标准 Order 比较 f[ei] 的值:
MinimalBy[data, First, 2]Sort[First /@ data, Order]TakeSmallestBy 和 MinimalBy 都将排序函数作为第四个参数,这使得它们实际上等价:
TakeSmallestBy[data, First, 2, Order] === MinimalBy[data, First, 2]MinimalBy[data, First, 2, NumericalOrder] === TakeSmallestBy[data, First, 2]当 TakeSmallestBy[{e1,e2,…},f,n] 中不同元素 ei 有相同的 f[ei] 值时,将保持原始顺序:
list = Range[-5, 5]TakeSmallestBy[list, Abs, 4]TakeSmallestBy[Reverse[list], Abs, 4]可能存在的问题 (2)
如果列表中的元素少于所要求的元素个数,则不执行 TakeSmallestBy 运算:
TakeSmallestBy[{3, 1, 2}, f, 5]用 UpTo 获取尽可能多的元素:
TakeSmallestBy[{3, 1, 2}, f, UpTo[5]]如果无法比较 f[ei] 的值,则不执行 TakeSmallestBy 运算:
TakeSmallestBy[{Quantity[1, "Hour"], Quantity[5, "Feet"]}, UnitConvert, 1]相关指南
-
▪
- 表格对象 ▪
- 计算结构化数据集 ▪
- 列表中的数学和统计运算
相关链接
文本
Wolfram Research (2015),TakeSmallestBy,Wolfram 语言函数,https://reference.wolfram.com/language/ref/TakeSmallestBy.html (更新于 2025 年).
CMS
Wolfram 语言. 2015. "TakeSmallestBy." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2025. https://reference.wolfram.com/language/ref/TakeSmallestBy.html.
APA
Wolfram 语言. (2015). TakeSmallestBy. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/TakeSmallestBy.html 年
BibTeX
@misc{reference.wolfram_2026_takesmallestby, author="Wolfram Research", title="{TakeSmallestBy}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/TakeSmallestBy.html}", note=[Accessed: 10-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_takesmallestby, organization={Wolfram Research}, title={TakeSmallestBy}, year={2025}, url={https://reference.wolfram.com/language/ref/TakeSmallestBy.html}, note=[Accessed: 10-October-2026]}