You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按单词数量对文件行排序并按词长排序行内单词?

问题解析与修正代码

你的代码存在几个关键问题,导致无法实现需求:

  • 语法错误:with语句同时打开多个文件时,只需写一次with,不需要重复声明
  • 读写流搞反:应该从file_in读取内容,向file_out写入,你代码里的读写对象完全颠倒了
  • 单词处理逻辑错误:你写的''.join(sorted(w))是把单词的字母打乱重排,但需求是按单词的字母数量排序,不是修改单词本身
  • 行排序键错误:用len作为排序键会按字符串的字符长度排序,而我们需要按每行的单词数量排序,得用单词数作为判断依据

修正后的代码

with open('input.txt', 'r') as file_in, open('output.txt', 'w') as file_out:
    # 读取输入文件的所有行,过滤空行并去除换行符
    raw_lines = [line.strip() for line in file_in if line.strip()]
    
    # 第一步:处理每行,将行内单词按字母数量排序
    processed_lines = []
    for line in raw_lines:
        words = line.split()
        # 按单词的字母长度排序,长度相同则保留原顺序
        sorted_words = sorted(words, key=lambda word: len(word))
        processed_lines.append(' '.join(sorted_words))
    
    # 第二步:按每行的单词数量对所有行排序
    final_lines = sorted(processed_lines, key=lambda line: len(line.split()))
    
    # 将结果写入输出文件
    file_out.write('\n'.join(final_lines))

代码说明

  1. 读取文件:用列表推导式读取所有非空行,避免处理无效的空内容
  2. 行内单词排序:通过lambda word: len(word)指定排序键为单词的字母数量,实现单词按长度排序
  3. 行排序:用lambda line: len(line.split())计算每行的单词数,以此为键对所有行排序
  4. 写入结果:把排序后的所有行用换行符连接,一次性写入输出文件

最终输出示例

针对你提供的输入内容,输出文件的内容会是:

I my was foe with angry
I my was with angry friend
I my it not did told grow wrath
I my my did end told wrath wrath

内容的提问来源于stack exchange,提问作者ddcrunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:35:34