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

Python实现指定字符对的4位全排列组合生成需求

解决方案

问题分析

你遇到的核心问题有两个:

  • combinations_with_replacement仅生成非递减顺序的组合,无法覆盖WSSW这类顺序变化的情况,导致结果不全。
  • 输入字符对存在等价重复项(如WS和SW),需要自动去重避免重复计算。

正确实现步骤

  1. 去重等价字符对:利用集合的无序性,将每个字符对转换为可哈希的frozenset,去重后再转回字符串,确保WS与SW被视为同一组。
  2. 生成全量合法字符串:使用itertools.product生成所有4位组合,该方法会遍历每个位置的字符选项,完全覆盖所有顺序排列的情况。

完整代码

import itertools

# 原始输入的字符对列表
texture_pairs = ['WS','SW','SB','BS','GW','WG','Gb','bG','gB','Bg']

# 去重等价字符对
unique_pairs = list({frozenset(pair) for pair in texture_pairs})
unique_pairs = [''.join(pair) for pair in unique_pairs]

tilesets = []

def generate_tileset(texture_pair):
    # 生成所有4位字符组合,转为字符串格式
    return [''.join(comb) for comb in itertools.product(texture_pair, repeat=4)]

for texture_pair in unique_pairs:
    tileset = generate_tileset(texture_pair)
    tilesets.append(tileset)
    print(f"字符对 {texture_pair} 的所有合法4位字符串:")
    print(tileset)

代码说明

  • 去重逻辑:frozenset消除了字符对的顺序差异,通过集合去重得到唯一的字符组合,避免重复计算。
  • 组合生成:itertools.product(texture_pair, repeat=4)会生成所有可能的4位笛卡尔积,每个位置都可选取字符对中的任意字符,完全覆盖WSSW、SWWS这类带顺序的组合。
  • 结果格式:将生成的元组转为字符串,直接得到TTTT格式的目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:18:16