如何用Python列表推导式实现大写字母前加空格的字符串处理?
如何用列表推导式实现大写字母前添加空格的逻辑
先看你原本的循环实现:
def solution(s): word = [] for letter in s: print(letter.isupper()) if letter.isupper(): word.append(" ") word.append(letter) else: word.append(letter) return ''.join(word) print(solution("helloWorld"))
这段代码的逻辑是遍历字符串每个字符,遇到大写字母时先追加空格、再追加字母,最终能得到正确输出hello World。
你最初尝试的列表推导式写法出错,问题出在" " and letter这个逻辑上:
def solution(s): word = [" " and letter if letter.isupper() else letter for letter in s] return ''.join(word)
Python里and是逻辑运算符,它会返回最后一个为真的表达式结果。因为空格字符串" "是真值,所以" " and letter最终只会返回letter,等于没加空格,自然输出和原字符串一致。
正确的做法是把空格和大写字母拼接成一个字符串元素,这样列表推导式生成的每个元素,大写字母对应的是" " + letter,其他字符保持原样,再通过join合并就实现了需求:
def solution(s): word = [" " + letter if letter.isupper() else letter for letter in s] return ''.join(word)
运行这段代码就能得到期望的hello World。
另外也可以直接用生成器表达式简化,省去显式创建列表的步骤:
def solution(s): return ''.join(" " + c if c.isupper() else c for c in s)
内容的提问来源于stack exchange,提问作者Matoi
相关产品推荐
相关产品推荐

