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)
我对 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)