我只想将列表中第一个单词的首字母大写,并将所有单词都按单词长度的升序小写。
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
答案 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())
不起作用,因为每个x
是z
中的一个单词-它永远不会等于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)