【发布时间】:2020-12-05 20:25:57
【问题描述】:
我对 for 循环的工作方式感到非常沮丧。生病发布两个场景。我的输出应该是 “12 abc”-->“12 Abc”,如果“12abc”-->“12abc”(输出)。但我为此想出了两个解决方案:
s= '12 abc'
a_string = s.split()
for word in a_string:
print(" ".join(word.capitalize()))
如果我使用这个 for 循环,我得到的输出为 “1 2 A b c"
*另一种解决方案 print(' '.join(word.capitalize() for word in a_string))
如果我使用这个 for 循环,我会得到正确的解决方案“12 Abc”
但是,
for word in a_string:
print("".join(word.capitalize()),end=' ')
上面的代码最后打印了一个空格。我也不想要那个额外的空间。
【问题讨论】:
-
word.capitalize()是一个字符串。当您将字符串传递给" ".join()时,它将被视为“字符列表”。所以你基本上是在做" ".join(["1", "2"])等。 -
print(' '.join(word.capitalize() for word in a_string)) --- 这里也一样。但这给出了正确的输出。这里的词也指字符串。请解释
-
那是因为
word.capitalize() for word in a_string不是字符串。它是一个“生成器”(有点像列表)。您需要意识到您正在将一个字符串传递给join。这就是你沮丧的根源。当您将字符串传递给需要列表的函数时,该字符串将被视为“字符列表”。 -
是的,我差不多明白了,你能说一下 word.capitalize() for word in a_string 和 for word in a_string: print(" ".join(word.capitalize())) 有何不同说第一个是生成器,但第二个你说它是一个字符串。你怎么知道它是一个生成器
-
查看我的更新答案。我认识到这种形式是一个生成器(它在 python 中被大量使用)。它总是看起来像这样:
f(x) for x in list_of_x
标签: python for-loop capitalize