Noc*_*Noc 10 python string indexing slice
我做了很多细读,但对于我想要理解的概念,我没有明确的答案.
在Python中,如果我列出一个列表,例如:
L1=['muffins', 'brownies','cookies']
Run Code Online (Sandbox Code Playgroud)
然后尝试使用代码替换第一个指向列表中对象的指针,即"松饼":
L1[0:1] = 'cake'
Run Code Online (Sandbox Code Playgroud)
我会得到一个列表L1:
['c', 'a', 'k', 'e', 'brownies', 'cookies']
Run Code Online (Sandbox Code Playgroud)
然而,如果我采用相同的列表并执行操作(现在使用字符串蛋糕中的4个元素):
L1[0:4] = ['cake'] # presumably, it's now passing the string cake within a list? (it passed into the modified list shown above)
Run Code Online (Sandbox Code Playgroud)
我得到了我最初想要的输出:
['cake', 'brownies', 'cookies']
Run Code Online (Sandbox Code Playgroud)
任何人都能解释为什么会这样吗?我假设当我最初拿蛋糕而不是在"列表"中时,它会将字符串分解为单个字符,以存储为对这些字符的引用,而不是对字符串的单个引用...
但我不完全确定.
NPE*_*NPE 14
两个要点:
从而
L1[0:1] = 'cake'
Run Code Online (Sandbox Code Playgroud)
替换的第一个元素L1
与单个字符的'cake'
.
要用字符串替换第一个元素'cake'
,只需写:
L1[0] = 'cake'
Run Code Online (Sandbox Code Playgroud)
或者,使用切片赋值语法:
L1[0:1] = ['cake']
Run Code Online (Sandbox Code Playgroud)
如果指定切片,则右侧被假定为列表/元组(实际上,任何可迭代 - 但要注意产生无限数量值的生成器).
要替换列表中的项目,请使用:
my_list[0] = "cake"
Run Code Online (Sandbox Code Playgroud)
(你也可以这样做
my_list[0:1] = ["cake"]
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用列表切片.