人工智能训练师三级:为什么“10”排在“2”前面?

TIVIA人工智能训练师三级排序自测:区分字符串比较、key=int比较键与输出类型转换,附五条可运行断言。

发布:2026-11-12 · TIVIA

人工智能训练师三级备考做数据处理练习时,排序结果不符合直觉,先看字段类型和比较规则。本例只用三个自拟数字字符串“2”“10”“1”,不涉及真实学员数据。

默认sorted比较这些字符串本身,结果是“1”“10”“2”:字符串“10”的首字符是“1”,因此排在首字符为“2”的字符串前。这不是按数值大小得到的顺序。

比较键不等于输出转换

若目标是按整数大小排序,可写sorted(values, key=int),结果为“1”“2”“10”。关键点:key=int提供比较键,并不把返回列表中的原字符串变成整数。引号仍在,元素类型仍是str。

如果后续计算确实需要整数,应明确转换,例如sorted(map(int, values)),这时得到整数列表[1, 2, 10]。按什么排,与输出什么类型,是两项分别验收的要求。sorted返回新列表,本例原values内容不变。

写法顺序元素类型
sorted(values)“1”“10”“2”str
sorted(values, key=int)“1”“2”“10”str
sorted(map(int, values))1、2、10int

运行五条断言

values = ["2", "10", "1"]
by_text = sorted(values)
by_number = sorted(values, key=int)
as_numbers = sorted(map(int, values))
assert by_text == ["1", "10", "2"]
assert by_number == ["1", "2", "10"]
assert all(isinstance(x, str) for x in by_number)
assert as_numbers == [1, 2, 10]
assert values == ["2", "10", "1"]
print(by_text, by_number, as_numbers)

自拟填空:希望按整数大小排,但保留原字符串,应填写sorted(values, key=____)。本例填int。再追问:结果中的“10”是字符串还是整数?仍是字符串。

适用范围:本例输入都是可由int解析的整数字符串。空字符串、含单位文本或“1.5”等小数字符串不能直接照搬这段int转换,须先定义清洗和类型规则。若字段是编号而非数量,也不能仅因看起来像数字就认定应按数值排序。本例不讨论Excel排序界面或NumPy数组的具体实现。

完成一个可解释的自测

今天的验收动作:先写清“比较规则”和“输出类型”,分别核顺序、元素类型、原数据是否保留。不要只看到数字顺序正确,就认为类型转换也已经完成。

本文由TIVIA产品方发布,AI辅助整理并执行自拟样例核验。TIVIA提供理论题学习与上机代码填空等学习内容。本文是排序基础延伸练习,不是官方真题、原题解答或通过承诺;完整产品范围以实际产品说明为准。

实操体验范围 · 免费理论练习(固定样本未必包含本文同题)。

技术参考:Python官方sorted文档。

微信学习群二维码

扫码加入学习群

使用微信扫描上方二维码