For循环打印不同的输出请检查一下

For loop prints different output Can this be checked please

我对 for 循环的工作方式感到非常沮丧。生病post两种情况。我的输出应该是 "12 abc"-->"12 Abc" 和 if "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=' ')

上面的代码最后打印了一个space。我也不想要额外的 space。

试试这个:

s= '12 abc'
a_string = s.split()
capitalized_strings = []
for word in a_string:
    capitalized_strings.append(word.capitalize())

print(" ".join(capitalized_strings))

请注意,我将大写单词放入一个列表中,然后在该列表中使用 join

您的问题是您将字符串传递给 join。这将字符串视为字符列表。 所以你基本上是在做 " ".join(["1", "2"])

生成器的解释:

写的时候

word.capitalize() for word in a_string

它 returns 一个叫做 generator 的东西。生成器像列表一样是“可迭代的”。

例如,如果您这样做(其中 a_string 是一个字符串列表):

a_string = ["12", "abc"]
list_of_words = [word.capitalize() for word in a_string]
print(list_of_words)

然后你会得到这个:

["12", "Abc"]

这就是所谓的“列表理解”。

所以当你写的时候:

" ".join(word.capitalize() for word in a_string)

它给出的结果与您这样做的结果相同:

" ".join(["12", "Abc"])

因此 join 将加入该列表中的 2 个元素,并在它们之间添加一个“ ” space。

这与调用不同:

" ".join("Abc")

如果您将字符串传递给 join,则效果与您这样做相同:

" ".join(["A", "b", "c"])

因为字符串被解释为“字符列表”。

使用此代码查看计算后打印的所有内容 step-by-step:

s = "12 abc"
print(s)

s_list = s.split()
print(s_list)

s_capitalized_list = [x.capitalize() for x in s_list]
print(s_capitalized_list)

result = " ".join(s_capitalized_list)
print(result)

请注意,我在列表理解中的生成器中使用了 x。这是为了告诉你,你选择的名字并不重要。

s = "123 abc"
result = s.title() if ' ' in s else s
print(result) # "123 Abc"

# try changing the s to "123abc" and see the result

试试这个。这有点pythonic。

python中有一个模块叫做re(Regular expression),它让我们解决这些类型的答案。试试这个代码:

import re
    x="12 abc"
    m=""
    for i in x:
        if i.isalpha():
            m=i
            break
    m=m.upper()
    q=re.sub(" [a-z]",m,x,1)
    print(q)