发布: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、10 | int |
运行五条断言
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文档。
Tivia