2016-11-06 187 views
0
name = list('ayushgupta') 
>>> name 
['a', 'y', 'u', 's', 'h', 'g', 'u', 'p', 't', 'a'] 
>>> name[5:5] = list('THE') 
>>> name 
['a', 'y', 'u', 's', 'h', 'T', 'H', 'E', 'g', 'u', 'p', 't', 'a'] 
>>> name[5:5] = [] 
>>> name 
['a', 'y', 'u', 's', 'h', 'T', 'H', 'E', 'g', 'u', 'p', 't', 'a'] 

如果我试图用名称[5:5]从名称中删除'T','H','E',则它不起作用。我知道我可以用名字[5:8]来删除它。任何人都可以解释为什么这样吗?python-从列表中删除元素

回答

0

你要做的:

>>> name[5:8] = [] 
>>> name 
['a', 'y', 'u', 's', 'h', 'g', 'u', 'p', 't', 'a'] 

你这么做的时候,name[5:5]=list('THE')THE得到了插入距离第五索引列表的第5索引列表。当你在做name[5:5] = []时,你并没有删除任何东西,而是试图插入空的list,因此没有改变。为了更新从列表中的项目5至8索引,你所要做的name[5:8] = []

或者,你可以使用del删除内容列表如下:

>>> del name[5:8] 
>>> name 
['a', 'y', 'u', 's', 'h', 'g', 'u', 'p', 't', 'a'] 
+0

“*任何人都可以解释它为什么如此?*”。好? –

+0

@AndrasDeak已经在更新的方式,检查编辑:) –

+3

好。您应该考虑花时间为第一次尝试提供完整的答案。它可以免除你一些降价。我只告诉你这一点,因为我已经看到你显示FGITW的行为很多,我认为这不利于提问者和网站。如果你给出答案,就把它做好。从长远来看,你甚至会得到更多的代表。 –

0

参见:

name[5:5] 

表示:从索引5(含)至5独占)的元素

所以,你必须使用的东西,如

name[4:5] 

选择(由相当复杂的方式)元素name[4]

1

您可以通过分配列表切片来更改列表的内容和长度。但是,您的切片是name[5:5]。请记住,一个切片不包含结束索引。因此,您的切片从name[5]开始并继续,但不包括name[5]。换句话说,你的切片是

总之,您试图删除列表中已经为空的部分。如果您尝试使用实际切片,例如name[5:8],那么您会更加成功。要只删除一个项目,请尝试name[5:6]。切片name[a:b]的长度为b-a(如果b大于或等于a),这很容易记住。