如示例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
但在这种情况下,双方的长度必须匹配