首页 > 解决方案 > 如何仅将列表中第一个单词的首字母大写

问题描述

我只想将列表第一个单词的第一个字母大写,其余所有单词按单词长度的升序小写。

z=['The' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
z.sort(key=len) 
print(" ".join(x.lower() for x in z))

我想要这样的结果按长度升序排列。

在是行顺序打印反向:

z=['The' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
# i tried like this 
z.sort(key=len)
s=[]
for x in z:
     if (x==0):
        s.append(z[0].capitalize())
     else:
        s.append(z[x].lower())

我试图获得的实际输出:

In the are lines order printed reverse

标签: pythonpython-3.x

解决方案


你的代码

for x in z:    # ['in', 'The', 'are', 'lines', 'order', 'printed', 'reverse']
     if (x==0):
        s.append(z[0].capitalize())
     else:
        s.append(z[x].lower())

不起作用,因为每个x都是一个单词z- 它永远不会等于,0所以添加的所有东西s都是你单词的小写版本。


您可以在迭代列表时使用enumerate它来获取列表中所有元素的索引。

第一个元素必须使用.title()套管,所有其他元素.lower()

z= ['The' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
z.sort(key=len) 

# reformat capitalization based in index, any number != 0 is true-thy
z = [ a.lower() if idx else a.capitalize() for idx, a in enumerate(z) ]

print(" ".join(z))

输出:

In the are lines order printed reverse

z = [ a.lower() if idx else a.capitalize() for idx, a in enumerate(z) ]是一个列表理解 - 作为正常循环,它看起来像:

s = []
for idx, word in enumerate(z):
    if idx:   # any idx > 0 is True-thy
        s.append(word.lower())
    else:
        s.append(word.capitalize())
# print the joined s 

您可以在此处了解pythonTrue对非布尔值的考虑: Truth-value-testing


推荐阅读