Python 列表中带字符串的切片分配
我读了不少书,但对于我试图理解的概念,我没有一个明确的答案 在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个元素): 我得到了我最初想要的输
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"]
如果您真的想使用列表切片
以下是一些其他相关参考文献:
两个要点:
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']