为什么这种将字符串转换为字符列表的实现有效



如示例3所述,用于将字符串转换为字符列表:

l = []
s = 'abc'
l[:0]=s
print(l) #Output is ['a','b','c']

我的问题是,第3行的作用有多直观或逻辑?这是可以从第一性原理推导出来的吗?或者这只是一个边缘案例?还有这样的例子吗?

要承认它是直观的,你需要知道一些事情,但主要是什么是切片。

一般来说,切片是一个表示列表中某些(非必要的紧凑(部分的对象。

l = [0,1,2,3,4,5]
l[0:2] # [0,1]
s = slice(0, 2)
l[s] # [0,1]
l[0:] # all list, actually should be just l[:]

python允许我们用这种语法分配一些可迭代的

l[0:2] = "abcd" # it replaces proper sublist with right side 
l # ['a','b','c','d',2,3,4,5]
l[0:] = [1,2,3] # replace all list with iterable on right side, one by one

因为字符串实际上是可迭代的,所以我们将每个字符作为列表的新元素。请注意,它不需要有相同的长度,它更像是剪切切片并插入新的元素。

我们也可以对非紧凑子列表这样做:

l[0::2] = "abc" # replace every second element with next element of iterable "abc"
l # ['a',1,'b',2,'c',3]
l[0::2] = [1] # ValueError: attempt to assign sequence of size 1 to extended slice of size 3

但在这种情况下,双方的长度必须匹配

最新更新