Python列表切片赋值疑问:为何字符串被拆分为字符插入?
切片赋值时字符串被拆分为单个字符的原因
示例代码
my_favorite_desserts = ["cheesecake", "bugs"] my_favorite_desserts.append("cookies") print(f"i love {my_favorite_desserts}") my_favorite_desserts[10:10] = "heeeeellllooooooooooooooo" my_favorite_desserts.remove('bugs') print(f"i love {my_favorite_desserts}")
执行输出
i love ['cheesecake', 'bugs', 'cookies'] i love ['cheesecake', 'cookies', 'h', 'e', 'e', 'e', 'e', 'e', 'l', 'l', 'l', 'l', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o']
问题解析
这是因为Python的切片赋值要求右侧是可迭代对象,而字符串本身就是由单个字符组成的可迭代对象。当你把字符串赋值给切片位置时,Python会自动遍历这个字符串的每一个元素(也就是每个字符),然后将这些字符依次插入到切片指定的位置。
如果想要把整个字符串作为单个元素插入列表,你需要把它放到一个可迭代的容器里(比如列表),修改成这样:
my_favorite_desserts[10:10] = ["heeeeellllooooooooooooooo"]
这样执行后,整个字符串就会作为一个完整元素被插入,而不是拆分成字符。
本质上,这和list("hello")会返回['h','e','l','l','o']是同一个逻辑——Python对待字符串的迭代行为就是逐个返回字符,切片赋值只是遵循了这个通用规则,用来实现批量插入元素的功能。
内容的提问来源于stack exchange,提问作者Bender Rodriguez
相关产品推荐
相关产品推荐

