Python:如何让>符号在集合排序后保持在行首
代码修改方案:保留行首
>并按集合S排序元素 需求说明
处理文件1内容时需满足:
- 带
>的行必须保持>在开头位置 - 行内元素按「是否在文件2、3组成的集合S中」排序,在S中的元素排在前面
- 普通行直接原样输出
输入示例
文件1内容:
>winter|mountain|snow winter weather >skate|slide winter activities >ice|water|freeze|melt winter temperatures
文件2内容:
water juice mountain
文件3内容:
sea ocean slide climb
期望输出
>mountain|winter|snow winter weather >slide|skate winter activities >water|ice|freeze|melt winter temperatures
原代码问题
原代码直接拆分所有元素参与排序,导致>被当作普通元素打乱位置,无法保留行首格式。
修改后的代码
S = set() for name in ['some_file_2.txt', 'some_file_3.txt']: with open(name, 'r') as f: # 过滤空行,避免集合混入无效空字符串 S.update(line.strip() for line in f if line.strip()) with open('some_file_1.txt', 'r') as f, open('some_output_file.txt', 'w') as fo: for line in f: line = line.strip() if not line: fo.write('\n') continue # 区分带>的行和普通行 if line.startswith('>'): # 剥离行首>,单独处理后续元素 content_part = line[1:] elements = content_part.split('|') # 按是否在S中排序:在S中的元素优先 sorted_elements = sorted(elements, key=lambda x: x not in S) # 拼接回带>的格式并写入 fo.write(f'>{"|".join(sorted_elements)}\n') else: # 普通行直接写入 fo.write(f'{line}\n')
关键改动点
- 过滤空行:读取文件2、3时过滤空行,避免集合S混入空字符串干扰排序判断
- 分离行首标识:对带
>的行,先剥离>,只对后续元素进行排序,确保>始终在开头 - 保留普通行原样:非
>开头的行直接输出,不做额外处理 - 保留核心排序逻辑:依然使用
key=lambda x: x not in S,让在S中的元素排在前面(x not in S返回False,排序优先级高于True)
内容的提问来源于stack exchange,提问作者ne_mar
相关产品推荐
相关产品推荐

