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]来删除它。谁能解释为什么会这样呢?
答案 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]
。