Python 列表中带字符串的切片分配

Python 列表中带字符串的切片分配,python,string,indexing,slice,Python,String,Indexing,Slice,我读了不少书,但对于我试图理解的概念,我没有一个明确的答案 在Python中,如果我使用一个列表,例如: L1=['muffins', 'brownies','cookies'] 然后尝试使用以下代码替换列表中对象的第一个指针,即“muffins”: L1[0:1] = 'cake' 我会得到一个列表L1: ['c', 'a', 'k', 'e', 'brownies', 'cookies'] 但是,如果我使用相同的列表并执行操作(现在使用字符串蛋糕中的4个元素): 我得到了我最初想要的输

我读了不少书,但对于我试图理解的概念,我没有一个明确的答案

在Python中,如果我使用一个列表,例如:

L1=['muffins', 'brownies','cookies']
然后尝试使用以下代码替换列表中对象的第一个指针,即“muffins”:

L1[0:1] = 'cake'
我会得到一个列表L1:

['c', 'a', 'k', 'e', 'brownies', 'cookies']
但是,如果我使用相同的列表并执行操作(现在使用字符串蛋糕中的4个元素):

我得到了我最初想要的输出:

['cake', 'brownies', 'cookies']
有人能确切地解释这是为什么吗? 我假设,当我开始吃蛋糕时,蛋糕不在“列表”中,它会将字符串分解成单个字符,作为对这些字符的引用存储,而不是对字符串的单个引用


但我不完全确定。

如果指定一个切片,则右侧被假定为列表/元组(实际上是任何iterable,但请注意生成无限个值的生成器)

要替换列表中的项目,请使用:

my_list[0] = "cake"
(你也可以

my_list[0:1] = ["cake"]
如果您真的想使用列表切片

以下是一些其他相关参考文献: 两个要点:

  • 切片指定在右侧获取一个iterable,并用iterable生成的对象替换切片的元素
  • 在Python中,字符串是可编辑的:对字符串进行迭代会生成其字符
  • 因此

    L1
    的第一个元素替换为
    'cake'
    的单个字符

    要将第一个元素替换为字符串
    'cake'
    ,只需编写:

    L1[0] = 'cake'
    
    或者,使用切片分配语法:

    L1[0:1] = ['cake']
    

    将字符串视为存储字符的序列容器。当您尝试以这种方式进行赋值时,它会将字符序列中的每个项目添加到列表中。首先将“蛋糕”包装在其自己的1元素列表中(我们称之为L2),而是将L2的每个元素添加到L1中——它不会递归地拆分最外层序列之外的序列容器

    L1 = ['muffins', 'brownies','cookies']
    L2 = ['cake']
    L1[0:1] = L2
    print L1
    ['cake', 'brownies', 'cookies']
    
    对于其他嵌套序列对象也是如此。请尝试使用更多嵌套序列对象,如下所示:

    L3 = [['pie', 'eclairs'], ['bacon', 'chocolate']]
    L1[0:1] = L3
    print L1
    [['pie', 'eclairs'], ['bacon', 'chocolate'], 'brownies', 'cookies']
    
    还值得注意的是,如果您不关心列表中的顺序/位置,可以使用
    append()
    ,而不必担心字符串被拆分:

    L1 = ['muffins', 'brownies','cookies']
    L1.append('cake')
    print L1
    ['muffins', 'brownies', 'cookies', 'cake']
    

    你的最后一个例子
    L1[0:4]=['cake']
    为我提供了
    ['cake']
    ,而不是python 2.6上的
    ['cake'、'brownies'、'cookies']
    ——还要注意的是,既然你已经获得了5张赞成票,显然你问了一个相当好的问题:)啊,最后一个例子是关于已经修改过的代码的——比如,我没有使用“L1=['muffins'、'brownies'、'cookies']”,而是使用“L1=['c'、'a'、'k'、'e'、'brownies'、'cookies']”来执行最后一个示例。@Levon-谢谢你说的好话!顺便说一句,我真的很喜欢你的个人资料-我可以复制/重述一下吗?我很讨厌我在回答中看到的那种“耶耶”的态度。我试着用足够的信息来回答这个问题,以我所感知到的他们的水平(和兴趣)为目标。当然,说吧,很高兴我不是唯一一个注意到一些成员态度的人。我完全同意,我也试着根据OP的水平调整回应。。如果问题非常基本,那么炫耀Python的能力是没有意义的。更好的办法是帮助你得到一个坚实的基本答案,并把那些花哨的东西留给更高级的问题:)。。话虽如此,这是一个很好的问题,我也投了赞成票;这消除了许多混乱。
    L3 = [['pie', 'eclairs'], ['bacon', 'chocolate']]
    L1[0:1] = L3
    print L1
    [['pie', 'eclairs'], ['bacon', 'chocolate'], 'brownies', 'cookies']
    
    L1 = ['muffins', 'brownies','cookies']
    L1.append('cake')
    print L1
    ['muffins', 'brownies', 'cookies', 'cake']