python当中的列表修改元素操作

在此之前我写了一个gui,用户输入很多单词在文本框里,这些单词是自动用括号隔开的,我们已经获取到了文本框里的单词
我的目的是在一串获取到的,并且由逗号隔开的多个单词,可以在指定单词的两边加上括号,并且能无限加
我的思路是字符转列表,在进行修改列表内容,最后在添加进文本框。按照我的思路,改如何进行修改?

代码如下:

import ttkbootstrap as ttk
from ttkbootstrap.constants import *
l = '('#设置符号变量
r = ')'

root=ttk.Window(
title='''填词测试''',
    themename='solar',  # 设置主题
    size=(600, 600),  # 窗口的大小
    position=(300, 100),  # 窗口位置
    resizable=(False, False),  # 让窗口不可更改大小
    alpha=0.91,  # 窗口透明度
    #iconphoto=r'res\at.ico'
)

str = 'hello,world,hello world,python'
showtag_text1 = ttk.Text(root, height=4, cursor='heart')
showtag_text1.place(x=0, y=0, width=500)
showtag_text1.insert('insert',str)

def add_hello():
    try:
        get_str = showtag_text1.get('1.0', END)  # 这个字符串是用户输入的,我们获取到输入的值,这个值都是用逗号隔开的
        str_to_list = get_str.split(',')  # 先转换字符串为列表

        index_hjfj = str_to_list.index('hello')  # 获取指定元素索引
        str_to_list[index_hjfj] = l + 'hello' + r  # 修改指定索引的内容,也就是添加括号

        text_over = ','.join(str_to_list)  # 删改完成列表后重新加入为字符串
        text_over.strip()  # 删除末尾多余空格

        showtag_text1.delete('1.0', END)  # 重新清理文本框内容
        showtag_text1.insert('insert', text_over)  # 最后向文本框插入内容
    except:
        print('我已经成功添加括号到指定单词上,但是只能添加一次,这样列表就改变了,但是导致第二次无法添加,请问如何改善代码?')


ttk.Button(root,text='加括号',command=add_hello).place(x=10,y=90)


root.mainloop()

直接replace不就好了吗

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
您的思路是正确的,将字符串先转换为列表,然后通过索引修改列表元素,再将列表转换为字符串插入到文本框中。

关于您提到的问题,是因为您使用了 index 函数获取指定元素的索引,但是这个函数只能返回第一个匹配元素的索引,因此如果您已经添加了括号,再次使用 index 函数获取的索引就会变成添加括号后的索引,导致无法再次添加括号。解决这个问题的方法是可以使用循环遍历列表,找到所有匹配元素的索引进行修改。

下面是修改后的代码示例:

import ttkbootstrap as ttk
from ttkbootstrap.constants import *

l = '('  # 设置符号变量
r = ')'

root = ttk.Window(
    title='''填词测试''',
    themename='solar',  # 设置主题
    size=(600, 600),  # 窗口的大小
    position=(300, 100),  # 窗口位置
    resizable=(False, False),  # 让窗口不可更改大小
    alpha=0.91,  # 窗口透明度
    #iconphoto=r'res\at.ico'
)

str = 'hello,world,hello world,python'
showtag_text1 = ttk.Text(root, height=4, cursor='heart')
showtag_text1.place(x=0, y=0, width=500)
showtag_text1.insert('insert', str)

def add_hello():
    try:
        get_str = showtag_text1.get('1.0', END)  # 这个字符串是用户输入的,我们获取到输入的值,这个值都是用逗号隔开的
        str_to_list = get_str.split(',')  # 先转换字符串为列表

        indices = [i for i, x in enumerate(str_to_list) if x.strip() == 'hello']  # 找到所有匹配元素的索引
        for i in indices:
            str_to_list[i] = l + str_to_list[i].strip() + r  # 修改指定索引的内容,也就是添加括号

        text_over = ','.join(str_to_list)  # 删改完成列表后重新加入为字符串
        text_over.strip()  # 删除末尾多余空格

        showtag_text1.delete('1.0', END)  # 重新清理文本框内容
        showtag_text1.insert('insert', text_over)  # 最后向文本框插入内容
    except:
        print('添加括号失败')

ttk.Button(root, text='加括号', command=add_hello).place(x=10, y=90)

root.mainloop()

在上述代码中,我们使用列表推导式和 enumerate 函数找到所有匹配元素的索引,然后使用循环遍历这些索引,修改指定索引的内容。修改后的内容还是使用 join 函数将列表转换为字符串,最后插入到文本框中。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^