Python排序函数失效问题:如何按数字排序并保留词数对应关系
问题分析与解决
你的代码核心问题是拆分方式错误:message.split()会把所有内容按空格拆成单个元素的列表,导致数字和对应的单词完全分离,没法绑定在一起排序。所以不管怎么调sort的key,都没法实现数字和单词配对排序的效果。
修正步骤
- 按行读取配对:先把文件内容按行拆分,每一行对应一组「数字+单词」,保证两者绑定。
- 转换数据类型:把每一行的数字字符串转成整数,确保排序时按数值大小(而非字符串字典序)排列。
- 正确排序配对:对绑定好的「数字+单词」元组列表,按数字排序。
- 按需展开结果:如果需要扁平列表格式,再把排序后的元组逐个展开。
修正后的代码
def decode(message_file): decoded_message = [] # 按行读取文件内容 with open(message_file, 'r') as file: lines = file.readlines() # 处理每一行,生成(数字, 单词)的元组列表 pairs = [] for line in lines: # 去掉每行末尾的换行符,再拆分数字和单词 num_str, word = line.strip().split() # 把数字转成整数,确保排序是按数值来的 pairs.append((int(num_str), word)) # 按数字从小到大排序 pairs.sort(key=lambda x: x[0]) # 展开成扁平列表格式 flattened = [] for item in pairs: flattened.append(str(item[0])) flattened.append(item[1]) print(flattened) decode("test.txt")
输出结果
运行后会得到正确排序的输出:
['1', 'I', '2', 'dogs', '3', 'love', '4', 'cats', '5', 'you', '6', 'computers']
内容的提问来源于stack exchange,提问作者Eric Fascetti
相关产品推荐
相关产品推荐

