Python:大写字符串中除一个单词以外的单词的第一个字符

时间:2019-02-08 06:38:38

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

我有字符串a = 'thirteen thousand and forty six'。变量a将始终包含一定数量的单词。我想将字符串中每个单词的首字符大写,但特定单词'and'除外。这是我的代码,可以正常工作:

b = []
for i in a.split():
    if i.lower() == 'and':
        b.append(i.lower())
    else:
        b.append(i.capitalize())
aa = " ".join(b)    #'Thirteen Thousand and Forty Six'

我尝试过的另一件oneliner是:

aa = " ".join([k.capitalize() for k in a.split() if k.lower() != 'and'])

但是,它将返回'Thirteen Thousand Forty Six'作为结果字符串,而省略单词'and'

问题是这项工作是否有可能使用列表推导或某些内置函数(不使用正则表达式)的单行代码?

4 个答案:

答案 0 :(得分:4)

正确的语法应该是

aa = " ".join([k.capitalize() if k.lower() != 'and' else k for k in a.split()])

当您将if子句放在理解的末尾时,它将跳过不满足条件的元素。但是,您的要求是在"and"时逐字返回项目。

答案 1 :(得分:1)

为什么不拆分默认值(split()),为什么不拆分“和”,并同时使用“和”重新加入?

aa = " and ".join([word.capitalize() for word in a.split(" and ")])

答案 2 :(得分:0)

以下代码段可能很有用,它仅以单行python代码给出了所需的输出:

s = 'thirteen thousand and forty six'
print(s.title().replace('And', 'and'))

答案 3 :(得分:-1)

您只需在大写字母之后用“和”替换

a = 'thirteen thousand and forty six'
(' ').join([x.capitalize() for x in a.split(' ')]).replace('And', 'and')