使用切片将字符串拆分为单个字符

5
我不理解下面的Python代码如何使用b[:0] = a将一个字符串拆分为单个字符。难道不应该只有b = ['abc']吗?
a='abc'
b=[]
b[:0]=a
print(b)

输出:

b=[a,b,c]

1
在这里有多个解释,特别是 Casey Kuball 的回答。 - DarrylG
1
@aderchox 这个问题更多地是关于为什么这段代码会表现出这样的行为。 - Rajarishi Devarajan
3个回答

2
这是因为列表构造器可用于分割任何可迭代对象,例如字符串。

您甚至不需要[:0]

list(a) # ['a', 'b', 'c']

或者,
b = []
b[:] = a # ['a', 'b', 'c']

1
根据Python Doc,每当赋值语句的左侧为切片时,Python会执行__setitem__操作,因此在本例中,它将右侧项目放置在切片的开头。请看以下示例:
>>> a = [1,2,3,4]
>>> b = [5,6,7,8]
>>> b[3:5] = a
>>> print(b)
[5, 6, 7, 1, 2, 3, 4]

0

这里有两个因素在起作用

当你执行

b[:0] = <something>

将 something 插入到列表的开头(这是对列表切片的追加)
如果你这样做了
b[1:3] = ['a', 'b', 'c']

然后,索引为12的项将被右侧的项目替换。

尝试以下操作:

b = []
b[:0] = [1, 2, 3]

你会注意到右侧的项目被插入到列表的开头
现在当你执行
b[:0] = "abc"

由于右侧的项目必须是一个序列,因此字符串被解包为['a','b','c'],然后将它们插入到列表的开头


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接