在Prolog中如何按奇前偶后排序符号表示的数字?
按指定规则排序数字符号列表的解决方案
需求确认
你想要把代表数字的英文符号(one、two、three、four、five)按照奇数对应符号在前,偶数对应符号在后的特定顺序排序,最终得到目标列表:[one, three, five, two, four]——当然可以生成这个列表,下面给你两种实用的实现思路:
方法一:动态排序(适配扩展需求)
如果以后可能需要添加更多数字符号,这种方法更灵活通用:
- 建立符号与数值的映射:先把每个英文符号对应到具体数字,方便判断奇偶性和排序
num_symbol_map = { 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5 } - 分组排序再合并:
- 筛选出所有对应奇数的符号,按数值从小到大排序
- 筛选出对应偶数的符号,同样按数值从小到大排序
- 把奇数组合并到偶数组前面,得到目标列表
original_symbols = ['one', 'two', 'three', 'four', 'five'] # 处理奇数组 odd_symbols = sorted( [s for s in original_symbols if num_symbol_map[s] % 2 != 0], key=lambda x: num_symbol_map[x] ) # 处理偶数组 even_symbols = sorted( [s for s in original_symbols if num_symbol_map[s] % 2 == 0], key=lambda x: num_symbol_map[x] ) # 合并得到结果 target_list = odd_symbols + even_symbols print(target_list) # 输出:['one', 'three', 'five', 'two', 'four']
方法二:直接生成固定列表
如果你的需求只局限于这五个符号,完全可以直接手动生成目标列表,简单高效:
target_list = ['one', 'three', 'five', 'two', 'four']
通用逻辑(跨语言适用)
不管你用什么编程语言,核心思路都是一致的:
- 先建立符号与数字的对应关系
- 按奇偶性分组,组内按数字大小排序
- 合并奇数组和偶数组(保持奇数在前的顺序)
内容的提问来源于stack exchange,提问作者Zhang Xinye
相关产品推荐
相关产品推荐

