如何更新列表中的字符串元素?Python切片赋值异常问题解析
列表切片赋值字符串未达预期效果
问题重现
原代码:
list_string=['black','red','green','blue','gray'] list_string[1:]='black'
运行结果:
['black', 'b', 'l', 'a', 'c', 'k']
预期结果:
['black','black', 'black', 'black', 'black']
问题原因
Python给列表切片赋值时,右侧得是可迭代的序列对象。字符串本身属于可迭代类型,执行赋值操作时,Python会自动把字符串拆成单个字符,依次填充到切片对应的位置,这就导致了'black'被拆成单个字符替换原切片的情况。
解决方案
方法1:用等长目标列表赋值
直接生成一个和切片长度一致、元素全为'black'的列表来赋值:
list_string=['black','red','green','blue','gray'] list_string[1:] = ['black'] * len(list_string[1:])
['black'] * n会创建包含n个'black'的新列表,刚好匹配切片list_string[1:]的长度,替换后就能得到预期结果。
方法2:循环逐个修改元素
遍历切片对应的索引位置,逐个把元素设为'black':
list_string=['black','red','green','blue','gray'] for i in range(1, len(list_string)): list_string[i] = 'black'
方法3:列表推导式重构列表
通过列表推导式直接生成符合要求的新列表:
list_string=['black','red','green','blue','gray'] list_string = ['black' if idx >= 1 else val for idx, val in enumerate(list_string)]
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

