【问题标题】:diffrence between for loop and the generator expressionfor循环和生成器表达式的区别
【发布时间】:2021-01-12 20:56:04
【问题描述】:

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

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

【问题讨论】:

  • 您的代码中没有列表理解。有一个generator expression:也许你就是这个意思?
  • @khelwood 第二种方法是列表理解。您正在连接(循环)第一个单词中的字母,但第二个单词中的单词。
  • @nagyl 生成器表达式不是列表推导式。
  • @khelwood 好的,你是对的。但它足够接近,可以被视为一个。
  • @khelwood thanx 我会修复它

标签: python for-loop generator-expression


【解决方案1】:

所以您在示例中有一个包含 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))

【讨论】:

  • 是的,它是生成器表达式的语法,首先 for 循环将运行,然后执行第二步
  • 你想要的输出是什么?我应该解释什么?第二个是如何工作的?
  • 我认为我将其误认为是列表理解,这就是我感到困惑的原因。我会使用我想这会帮助我的语法,顺便说一句,谢谢你的努力男人
  • 别着急,和列表理解一样,只是作为内存性能提升的一个参数。它的相同只是使用不同的名称。我添加了一个解释,也是一个实现第一个输出的例子。
猜你喜欢
  • 2014-07-24
  • 2017-08-06
  • 2011-01-22
  • 2011-07-04
  • 2023-04-06
  • 1970-01-01
  • 2019-03-02
  • 2015-02-25
  • 1970-01-01
相关资源
最近更新 更多