我有字符串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'
。
问题是这项工作是否有可能使用列表推导或某些内置函数(不使用正则表达式)的单行代码?
答案 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')