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

在Prolog中如何按奇前偶后排序符号表示的数字?

按指定规则排序数字符号列表的解决方案

需求确认

你想要把代表数字的英文符号(one、two、three、four、five)按照奇数对应符号在前,偶数对应符号在后的特定顺序排序,最终得到目标列表:[one, three, five, two, four]——当然可以生成这个列表,下面给你两种实用的实现思路:


方法一:动态排序(适配扩展需求)

如果以后可能需要添加更多数字符号,这种方法更灵活通用:

  1. 建立符号与数值的映射:先把每个英文符号对应到具体数字,方便判断奇偶性和排序
    num_symbol_map = {
        'one': 1,
        'two': 2,
        'three': 3,
        'four': 4,
        'five': 5
    }
    
  2. 分组排序再合并:
    • 筛选出所有对应奇数的符号,按数值从小到大排序
    • 筛选出对应偶数的符号,同样按数值从小到大排序
    • 把奇数组合并到偶数组前面,得到目标列表
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:49:05