在 Python 中迭代字符串索引时遇到问题
Posted
技术标签:
【中文标题】在 Python 中迭代字符串索引时遇到问题【英文标题】:Trouble Iterating Over String Indexes in Python 【发布时间】:2021-10-01 07:35:26 【问题描述】:我希望 Python 获取一个字符串并遍历它,打印多个变体,其中单个字母大写。像这样:
输入:
“你好世界”
输出:
“Hello world”、“hEllo world”、“heLlo world”等
这是我目前所拥有的:
string = "hello world".lower()
for x in range(0, len(string)):
new_string = string[:(x-1)].lower() + string[x].capitalize() + string[(x-1):].lower()
print(new_string)
但是,这段代码会吐出一些看起来很时髦的字符串:
hello worlHd
Ehello world
hLello world
etc.
我怀疑我的问题与我索引字符串的方式有关,但我不确定要更改什么。有什么想法吗?
【问题讨论】:
您的索引错误:new_string = string[:x].lower() + string[x].upper() + string[x+1:].lower()
这样的东西可以工作:[print(string[:(x-1)].lower() + string[x-1].capitalize() + string[(x):]。 lower()) for x in range(1, len(string)+1)]
当您尝试检查各个切片的值时发生了什么? (尝试使用repr
以便您可以看到字符串周围的引号,突出显示空字符串、空格等)
我认为错误的代码是在您的第一个循环中,表达式: string[:(x-1)] 表示从零索引(包含)到最后一个索引(排除)= string[ 0 : -1)]
【参考方案1】:
这里有一个简单的更改,它应该可以与您的语法一起使用。
for i in range(len(string)):
print(string[:i] + string[i].upper() + string[i+1:])
输出:
Hello world
hEllo world
heLlo world
helLo world
hellO world
hello world
hello World
hello wOrld
hello woRld
hello worLd
hello worlD
还有其他方法可以做到这一点,但这个很容易理解。
PS:你也可以在左右两边加上.lower()。这完全取决于您使用的输入。
【讨论】:
【参考方案2】:string = "hello world".lower()
for x in range(0, len(string)):
new_string = string[:(x)].lower() + string[x].capitalize() + string[(x+1):].lower()
print(new_string)
你需要像索引一样思考。因此,如果您使用string[(:x-1)]
,它将添加两次大写字符。
【讨论】:
以上是关于在 Python 中迭代字符串索引时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用“插入选择暂停”插入并在 Python Flask 中使用可迭代