Python使用join方法输出字符串格式错误,需生成(a, b and c)格式
问题:提取两个字符串的共同字母并按指定格式输出
我需要编写一个函数,从两个字符串中提取共同的字母,输出格式要求为(a, b and c),但当前使用join方法得到的结果是(a,b,and,c)这种错误格式。
原代码
def task10(str1,str2): str1=str1.lower() str2=str2.lower() ch1="" ch2="" for i in str1: if i.isalpha(): ch1+=i for k in str2: if k.isalpha(): ch2+=k common = list(set([c for c in ch1 if c in ch2])) s=len(common) if s==0: common=['no common letters'] common.sort() if s>1: common.insert(-1," and ") common= ', '.join(common) common = common.replace(', and ,', 'and') print(f'{common}') task10("i like big cups","i cannot lie")
问题分析
原代码通过插入" and "再替换的方式处理格式,存在明显逻辑漏洞:
- 插入
" and "到列表倒数第二位后,用,join会生成类似i, l, and , e的字符串,后续替换', and ,'时,空格匹配容易出错 - 未处理单个字母的情况,且最终输出未添加要求的括号
修正方案
针对列表的格式拼接,分情况处理更可靠:
- 无共同字母:返回指定提示文本
- 单个共同字母:直接输出该字母
- 多个共同字母:将前n-1个字母用
,连接,再拼接' and '和最后一个字母 - 最后统一包裹括号
修正后的代码
def task10(str1, str2): # 提取字符串中的字母并转为小写 ch1 = ''.join([c for c in str1.lower() if c.isalpha()]) ch2 = ''.join([c for c in str2.lower() if c.isalpha()]) # 获取共同字母并排序 common = sorted(set(ch1) & set(ch2)) # 处理不同情况的格式 if not common: result = "no common letters" elif len(common) == 1: result = common[0] else: result = ', '.join(common[:-1]) + ' and ' + common[-1] # 包裹括号并输出 print(f'({result})') task10("i like big cups","i cannot lie")
代码说明
- 提取字母部分用生成器表达式简化,替代原有的循环拼接逻辑,更简洁高效
- 用集合交集
set(ch1) & set(ch2)直接获取共同字母,比列表推导式加set更直观 - 分情况处理格式,避免了插入和替换带来的空格匹配问题,逻辑更清晰
- 最终输出添加了要求的括号,符合格式规范
内容的提问来源于stack exchange,提问作者koketso lepulana
相关产品推荐
相关产品推荐

