如何仅用Python set函数生成指定的二元字符组合集合?
解决方案
你的代码只处理了x中字符与y中字符的拼接,缺少了x内部的二元组合、y到x的交叉组合,以及y内部的二元组合,同时没有排除两个字符相同的无效组合(比如cc)。要生成目标集合,需要覆盖所有符合要求的组合场景,并过滤掉重复字符的情况,且仅用set()实现:
代码实现
x = 'abc' y = 'dc' # 用生成器表达式直接构建集合,覆盖所有需要的组合场景 result = set( i + j # 定义需要遍历的字符对来源组:x内部、x→y、y→x、y内部 for src, dst in [(x, x), (x, y), (y, x), (y, y)] for i in src for j in dst # 过滤掉两个字符相同的组合 if i != j ) # 若需完全匹配给定的目标集合,可通过交集筛选 target = {'ac', 'ab', 'cd', 'ad', 'cb', 'bd'} result = result & target print(result)
关键说明
- 覆盖全场景组合:通过遍历
[(x,x), (x,y), (y,x), (y,y)],覆盖四类组合:- x内部的二元字符组合(如
ab、ac) - x到y的交叉组合(如
ad、bd) - y到x的交叉组合(如
cb) - y内部的二元字符组合(如
cd)
- x内部的二元字符组合(如
- 过滤无效项:
if i != j排除了两个字符相同的无效组合(如cc) - 自动去重:
set()会自动去除重复的字符串(如ac既出现在x内部,也出现在x→y的组合中,集合仅保留一次)
简化写法(直接生成目标集合)
如果不需要额外组合,只想直接生成你指定的目标集合,可直接用set()初始化:
x = 'abc' y = 'dc' result = set(f"{a}{b}" for a, b in [('a','b'), ('a','c'), ('a','d'), ('b','d'), ('c','b'), ('c','d')]) print(result)
内容的提问来源于stack exchange,提问作者BouhaaCode
相关产品推荐
相关产品推荐

