如何仅将列表中第一个单词的首字母大写

时间:2019-05-19 08:45:40

标签: python python-3.x

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

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

4 个答案:

答案 0 :(得分:3)

您的代码

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())

不起作用,因为每个xz中的一个单词-它永远不会等于0,因此所有添加到{{1 }}是您的单词的小写版本。


您可以 use enumerate在迭代的同时获取列表中所有元素的索引。

第一个元素必须使用s大小写,其他所有元素都应使用.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) ]

您可以在此处了解 python 对于非布尔值的看法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 Truth-value-testing

答案 1 :(得分:2)

您不需要使用<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.shubhasish.boot.practice</groupId> <artifactId>spring-boot-practice</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>spring-boot-practice</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </pluginManagement> </build> </project> 循环(或enumerate),如果您确定第一个值的类型将始终保持不变,则可以使用capitalize()方法是str

换句话说,对列表的第一个值调用for方法,并将索引capitalize()处的值更改为其结果。

例如,以下代码:

0

应输出:

z = ['the' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
z.sort(key = len)
z[0] = z[0].capitalize()
print(z)

如果您使用空格将其加入,如下所示:

['In', 'the', 'are', 'lines', 'order', 'printed', 'reverse']

它将输出:

z = " ".join(z)

警告:如果您确实决定在'In the are lines order printed reverse' 上使用join,则会将其类型从z更改为list,索引仍然可以使用,但是str将不再等于z[0],它将变为In


如果要非常彻底,并确保所有其他单词都小写,则可以使用以下列表理解代替上述技巧:

I

预期输出:

z = ['the' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
z.sort(key = len)
z = [(x.capitalize() if i == 0 else x) for (i, x) in enumerate(z)]

使用['In', 'the', 'are', 'lines', 'order', 'printed', 'reverse'] 加入后的输出:

" ".join(z)

祝你好运。

答案 2 :(得分:1)

这是您期望的基本答案输出。您必须为列表中的第一个值调用capitalize()方法,并将其在索引0处的值更改为大写。

这是执行此操作的基本代码

list = ['the' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
list.sort(key = len)
list[0] = list[0].capitalize()
print(list)

输出将为数组形式:

['In', 'the', 'are', 'lines', 'order', 'printed', 'reverse']

以句子的形式获取它,您可以尝试下面的代码

list = ['the' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
list.sort(key = len)
list[0] = list[0].capitalize()
print(" ".join(list))

输出将

In the are lines order printed reverse

" ".join(list)只是空格形式的列表,可以将列表形式的输出转换为句子

答案 3 :(得分:0)

我写了这个简单的代码,我知道这不是最简洁的,但是可以做到:

z=['The' ,'lines', 'are', 'printed', 'in', 'reverse', 'order']
s=[]
for x in z:   
    wordup=(x[0].upper() + x[1:len(x)]) 
    s.append(wordup)
print(s)

x不是整数,我们正在迭代列表z中的字符串x

wordup是(x)首个字母与大写(x)的串联:这意味着从索引1到x(len(x))的结尾

使用'capitalize()'方法:

z=['in', 'The', 'are', 'lines', 'order', 'printed', 'reverse']
s=[]
for x in z: 
    s.append(x.capitalize())
print(s)