2

我是python新手,做一些测试我发现了这一点。

>item="testing315testing08634567890"
>item.index("086")
17
>item[17:10]
''
>item[17:]
'08634567890'

我不明白为什么不工作,而与其他字符串一起工作。请注意,如果我这样做...

> item[4:10]
'ing315'

中间的数字会造成麻烦吗?这是一个错误吗?我错过了什么吗?我正在使用 Python 3.3

4

4 回答 4

2

列表切片的结束索引是大于开始索引的位置,而不是切片的大小!所以你想要这样的东西:

item[17:len(item)]

请注意,这与前面的代码片段完全相同:

item[17:]

切片的开始索引和结束索引alist[a:b]应该像这样解释:切片从位置 in 中的项目开始,到a位置 in之前alist的一个元素结束。和都是中的索引balistabalist

于 2013-04-25T00:32:18.647 回答
0

当您索引具有这样范围的字符串时,您必须首先放置下限,然后放置上限,如下所示:

item[10:17]

可以把它想象成“我想要这个字符串从abb排除在哪里)”,如:

some_string[a:b]

如果您希望字符串结束(或从头开始),您可以简单地省略绑定。

这是一个例子:

my_string = "test"
my_string[:2]       ==> "te"
my_string[2:]       ==> "st"
my_string[:]        ==> "test"
my_string[1]        ==> "e"
my_string[1:3]      ==> "es"
于 2013-04-25T00:31:30.230 回答
0

索引中的第二个数字必须大于第一个数字。例如:

item[17:17]
item[17:10]
item[17:17-1]

都会回来,

''

如果您想在匹配的索引之后获取 10 个字符,您可以执行以下操作:

>item="testing315testing08634567890"
>item[item.index("086") : item.index("086")+10]
'0863456789'
于 2013-04-25T01:09:21.783 回答
0

正如其他人所说,第二个参数是一个结束索引。但一个不错的 hack 也可以:

list[x:x+len]

所以如果你想要 10 个字符,从 17 开始,如示例中所示:

item[17:17+10] will give you the desired result.

注意:这不会导致任何索引错误,但如果字符串比结束索引 (17+10 == 27) 短,它将产生与 item[17:] 相同的结果。接受的答案解决了提出的问题,但如果你想要中间的 10 个:

item="testing315testing08634567890some_other_stuff_here"

item[17:] == "08634567890some_other_stuff_here"
item[17:17+10] == "08634567890"

保留 17+10 符号是因为它清楚地表明了意图并允许轻松替换可能直到运行时才知道的变量。

于 2015-07-17T17:14:32.113 回答