Python括号子字符串不工作,为什么?

Python括号子字符串不工作,为什么?,python,python-3.x,substring,square-bracket,Python,Python 3.x,Substring,Square Bracket,我是python新手,在做一些测试时发现了这一点 >item="testing315testing08634567890" >item.index("086") 17 >item[17:10] '' >item[17:] '08634567890' 我不明白为什么它不工作,而在其他字符串中它工作。请注意,如果我这样做 > item[4:10] 'ing315' 中间的数字会引起麻烦吗?这是虫子吗?。我错过什么了吗? 我使用的是Python3.3,当你索引一个字符

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

>item="testing315testing08634567890"
>item.index("086")
17
>item[17:10]
''
>item[17:]
'08634567890'
我不明白为什么它不工作,而在其他字符串中它工作。请注意,如果我这样做

> item[4:10]
'ing315'
中间的数字会引起麻烦吗?这是虫子吗?。我错过什么了吗?
我使用的是Python3.3,当你索引一个字符串时,你必须把下限放在第一位,把上限放在第二位,就像这样:

item[10:17]
可以这样想:“我希望这个字符串从
a
b
(其中
b
被排除在外)”,如下所示:

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

下面是一个例子:

my_string = "test"
my_string[:2]       ==> "te"
my_string[2:]       ==> "st"
my_string[:]        ==> "test"
my_string[1]        ==> "e"
my_string[1:3]      ==> "es"

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

item[17:len(item)]
>item="testing315testing08634567890"
>item[item.index("086") : item.index("086")+10]
'0863456789'
请注意,这与前面的代码片段完全相同:

item[17:]

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

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

item[17:17]
item[17:10]
item[17:17-1]
都会回来,

''
如果要获取匹配索引后的10个字符,可以执行以下操作:

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

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

list[x:x+len]
因此,如果您想要10个字符,从17开始,如示例中所示:

item[17:17+10] will give you the desired result.
注意:这不会导致任何索引错误,但如果字符串短于结束索引(17+10==27),它将产生与项[17:]相同的结果。被接受的答案解决了提议的问题,但如果您想要中间的10:

item="testing315testing08634567890some_other_stuff_here"

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

保留17+10符号是因为它清楚地显示了意图,并允许轻松替换运行时才知道的变量。

是的,我知道。。。在我的例子中,项目[17:10]应该给出“08634567890”,但它不是working@user2088601,第二个索引不是长度,它指定要从中获取的字符串中的第二个位置。Python希望第二个索引在字符串中的位置晚于第一个索引。如果不是,则返回空字符串
”。您的输出完全是预期的。如果您的意图是向后看17-10,您可以执行
项[17:10:-1]
。不知道你是不是这个意思。