for循环与生成器表达式之间的差异 第二种方法:

问题描述

我尝试了这两种方法来将字符串中每个单词的第一个元素首字母大写,但我无法理解第二种方法是如何工作的。

s=input().split()

for i in s:
 
    print(' '.join(i.capitalize()))

这是第二种方法

  a_string = input().split(' ')

  print(' '.join((word.capitalize() for word in a_string))) 

输出

input-----mike hussey

输出1

M i k e

H u s s e y

输出2

Mike Hussey

解决方法

因此,在示例中,您有2个单词的列表。

s = ['mike','hussey']

在第一次尝试中,您将遍历单词,并将字母与空格连接起来,将第一个字母大写。还有多个print语句,因此您将看到多行。

print(' '.join(i.capitalize())) #i = ['m','i','k','e']

在第二次尝试时,您将单词连接在一起,每个单词的首字母大写,字母之间没有空格。另外,还有一个print语句,因此只有一行输出。

print(' '.join((word.capitalize() for word in a_string))) #a_string = ['mike','hussey']

第二种方法:

首先,您具有上面的列表。首先,您将每个单词都大写

word.capitalize() for word in a_string

现在,您的列表看起来像['Mike','Hussey']。您将这些单词与空格连接在一起,因此输出将为

Mike Hussey <-- space between the 2 capitalized words.

如果单词之间需要空格,单词之间需要换行,则应将每个单词的字母与空格连接起来,并用换行将单词连接在一起。示例:

print('\n'.join(' '.join(letter for letter in word) for word in a_string))