Python for循环与生成器表达式之间的差异
我尝试了这两种方法将字符串中每个单词的第一个元素大写,但我无法理解第二种方法是如何工作的Python for循环与生成器表达式之间的差异,python,for-loop,generator-expression,Python,For Loop,Generator Expression,我尝试了这两种方法将字符串中每个单词的第一个元素大写,但我无法理解第二种方法是如何工作的 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
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.
代码中没有列表理解。有一个问题:也许这就是你的意思?@khelwood第二种方法是列表理解。您正在连接(循环)第一个单词中的字母,但第二个单词中的字母。@nagyl生成器表达式不是列表理解。@khelwood好的,您是对的。但是它很近,足以被视为一个。@khelwood thanx我会修复它是的,是生成器表达式的语法,第一个for循环将运行,然后它执行第二个步骤,您想要的输出是什么?我该怎么解释?第二个是如何工作的?我想我把它误认为是列表理解,这就是为什么我感到困惑。我将使用语法,我想这将帮助我btw thanx为您的努力,不要担心,它与列表理解相同,只是用作提高内存性能的参数。它是一样的,只是用了不同的名字。我添加了一个解释,也添加了一个示例来实现第一个输出。
print('\n'.join(' '.join(letter for letter in word) for word in a_string))