在 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 中使用可迭代

python 基础数据类型补充,以及容易遇到的坑

通过 Pandas 将 Excel 字段导入 Python 时遇到问题 - 索引越界错误

python学习之遇到得基础报错

在 Django 模板中迭代 dict 时遇到问题

字符串在python中浮动时遇到问题