相同Python代码每次运行输出不一致原因咨询及预期输出实现请求
问题原因
- Python的
set属于无序集合,不会保留元素的插入顺序,调用''.join(se)拼接字符时的顺序完全随机,是每次运行输出不一致的核心原因。 - 字符串分割逻辑错误:你错误地将分块总数
n作为切片步长,实际需求是将原字符串按长度k切割为等长子串,当前代码拿到的子串不符合处理要求。 - 额外输出
None的原因:函数没有定义返回值,调用print(merge_the_tools(s,3))时会打印函数默认的返回值None。
修复方案
按需求调整分割逻辑,同时使用保留插入顺序的去重方案替代set,Python 3.7及以上版本可直接利用字典保留插入顺序的特性实现,代码如下:
s='AABCAAADA' def merge_the_tools(size,k): block_count = len(size) // k for i in range(block_count): # 按k长度切割子串 sub_str = size[i*k : (i+1)*k] # 按原顺序去重 unique_sub = ''.join(dict.fromkeys(sub_str).keys()) print(unique_sub) # 无需额外print,函数内部已处理输出 merge_the_tools(s,3)
如果需要兼容Python 3.7以下版本,可以手动实现顺序去重逻辑:
s='AABCAAADA' def remove_dup_keep_order(s): seen = set() res = [] for c in s: if c not in seen: seen.add(c) res.append(c) return ''.join(res) def merge_the_tools(size,k): block_count = len(size) // k for i in range(block_count): sub_str = size[i*k : (i+1)*k] print(remove_dup_keep_order(sub_str)) merge_the_tools(s,3)
上述代码运行后可稳定输出预期结果:
AB CA AD
内容的提问来源于stack exchange,提问作者ASHUTOSH RAI
相关产品推荐
相关产品推荐

