【问题标题】:Capitalisation of First Letter of Each Word in a List; Bar All-Caps Words列表中每个单词的首字母大写;酒吧全大写单词
【发布时间】:2026-01-31 08:45:02
【问题描述】:

我需要编写一个程序,可以将句子中的每个单词大写(存储为单词列表),而不影响句子其他部分的大写。

假设,例如,句子是“你好,我是 ROB ALSOD”。在列表中,这将是:

['hello,','i','am','ROB','ALSOD']

我知道我可以循环并使用str.title() 方法为它们命名,但这会导致:

['Hello,','I','Am','Rob','Alsod']

注意到区别了吗?我想要的效果是:

['Hello,','I','Am','ROB','ALSOD']

换句话说,我希望其他大写字母保持不变。

【问题讨论】:

    标签: python string list python-3.x capitalization


    【解决方案1】:

    这是一个单行代码,使用list comprehensions 和字符串slicing

    >>> words = ['hello,','i','am','ROB','ALSOD']
    >>> [word[:1].upper() + word[1:] for word in words]
    ['Hello,', 'I', 'Am', 'ROB', 'ALSOD']
    

    它大写 word[:1](直到并包括第一个字符)而不是 word[0](第一个字符本身),以避免在您的列表包含空字符串 '' 时出现错误。

    【讨论】:

      【解决方案2】:

      虽然Zero Piraeus's answer 是正确的,但我会选择更多避免循环的functional syntax

      >>> words = ['hello,','i','am','ROB','ALSOD']
      >>> def up(word): return word[:1].upper() + word[1:]
      >>> map(up, words)
      ['Hello,', 'I', 'Am', 'ROB', 'ALSOD']
      

      【讨论】:

      • 在 Python 3.x 中,map() returns an iterator 而不是列表,所以你的最后一行需要是 list(map(up, words))。顺便说一句,map() 并没有避免循环,而只是隐藏它们(就像列表推导一样) - 通常,在这种情况下,与 listcomps 相比,性能会受到显着影响。