首页 > 解决方案 > 通过切片将字符串转换为列表:可能是控制流/语法查询

问题描述

我发现已经将字符串转换为列表的代码,但我试图理解部分 list1[:0]=string。你能向我解释一下这是如何工作的吗?我理解这[:0]部分。

我试图理解的是为什么这行是这样写的,因为从左到右阅读它对我来说没有意义。我估计最左边的部分通常是一个变量,它会被分配给它,这将使用 = 符号发生。任何解释都将不胜感激,并对 Noob 问题表示歉意。

# Python code to convert string to list character-wise
def Convert(string):
    list1=[]
    list1[:0]=string
    return list1

str1="ABCD"
print(Convert(str1))

标签: pythonsyntax

解决方案


啊,但它是一个变量!我们只是在我们的list(或者更具体地说,我们的sequence)中添加切片魔法。

如果我们稍微扩展一下示例,就会更容易看到发生了什么:

>>> my_list = []
>>> my_list[:0] = "1234"
>>> my_list
['1', '2', '3', '4']
>>> my_list[:0] = "5678"
>>> my_list
['5', '6', '7', '8', '1', '2', '3', '4'] 

赋值操作是将sequence(我们的字符串)的内容分配到列表中直到 index 的位置0(不包括 index 0)。Python 会自动在列表的前面腾出空间,sequence然后插入sequencestrstr

如果我们以我们的例子而不是 slice [:1]

>>> my_list[:1] = "ABCD"
>>> my_list
['A', 'B', 'C', 'D', '6', '7', '8', '1', '2', '3', '4']

当我们分配给一个扩展为 index 的切片时1(包括 index 0,但不包括 index 1),您可以看到我们已经5从列表中丢失了,内容ABCD被添加到列表的开头。

并从另一个方向证明:

>>> my_list[-1:] = "EFGH"
>>> my_list
['A', 'B', 'C', 'D', '6', '7', '8', '1', '2', '3', 'E', 'F', 'G', 'H']

现在我们插入了从 index 开始的序列-1(或序列中的最后一项),因此4list.


推荐阅读