python-从列表中删除元素

时间:2016-11-06 18:39:22

标签: python

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']

如果我尝试删除',' H',' E'从名字使用名称[5:5],它不起作用。我知道我可以用名字[5:8]来删除它。谁能解释为什么会这样呢?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

你必须这样做:

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

当你这样做时,name[5:5]=list('THE')THE被插入列表中从第5个索引到第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']

答案 2 :(得分:0)

请参阅:

String fileText = "http://example.com//foo/bar http://example.com//foo/bar  1: 2/";
String pattern = "(\\bhttps?://)|[:/]";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(fileText);
StringBuffer sb = new StringBuffer();
while (m.find()) {
    if (m.group(1) != null)
        m.appendReplacement(sb, m.group(1));
    else
        m.appendReplacement(sb, " ");
}
m.appendTail(sb);
System.out.println(sb);
// => http://example.com  foo bar http://example.com  foo bar  1  2

表示:从索引 name[5:5] (包括)到5的元素(独占

所以你使用的东西是

5

选择(通过相当复杂的方式)元素 name[4:5]