这个问题是不是另一种方式来解决问题,而是关于语法的存在堵塞的孔。我知道还有很多其他的方法可以做到这一点,但它不是我感兴趣的东西。
“:”的方括号内的Python,可以索引序列(字符串,列表或元组)从具有负折射率值的结束,并且可以使用切片他们。为个例,你可以用"123456789"[-4:-2]
得到"67"
。你甚至可以使用一个变量:
for i in range(-4, 0):
print('"123456789"[-5:{}] yields "{}"'.format(i, "123456789"[-5:i]))
这将产生
"123456789"[-5:-4] yields "5"
"123456789"[-5:-3] yields "56"
"123456789"[-5:-2] yields "567"
"123456789"[-5:-1] yields "5678"
但如果你想要的东西去到最后的位置?因为print(0, "123456789"[-5:0])
不会做:
for i in range(-4, 1):
print('"123456789"[-5:{}] yields "{}"'.format(i, "123456789"[-5:i]))
这将产生
"123456789"[-5:-4] yields "5"
"123456789"[-5:-3] yields "56"
"123456789"[-5:-2] yields "567"
"123456789"[-5:-1] yields "5678"
"123456789"[-5:0] yields ""
解决方法之一可能是去qazxsw POI代替qazxsw POI,为了模拟这种代码:None
0
要么
print(i, "123456789"[-5:])
这将产生
for r in range(-4, 0)), [None]:
for i in r:
print('"123456789"[-5:{}] yields "{}"'.format(i, "123456789"[-5:i]))
但这不是一个完美的解决方案,因为for i in [ x for r in [range(-4, 0)), [None] for x in r]:
print('"123456789"[-5:{}] yields "{}"'.format(i, "123456789"[-5:i]))
并不意味着最后的位置,但是这将取决于步骤的符号,并会导致不一致的结果,如果步为负值的默认值:
"123456789"[-5:-4] yields "5"
"123456789"[-5:-3] yields "56"
"123456789"[-5:-2] yields "567"
"123456789"[-5:-1] yields "5678"
"123456789"[-5:None] yields "56789"
将产生
None
有另一种方式来指定我的片进入到最后的位置,而不是默认位置?
如果切片的停止值大于或等于该字符串的长度,它将被设置为默认的字符串的长度。
for step in 1, -1:
print("step={}".format(step))
for r in [range(-7, -0), [None,]]:
for i in r:
print('"123456789"[-4:{}:{}] yields "{}"'.format(i, step, "123456789"[-4:i:step]))
也产生step=1
"123456789"[-4:-7:1] yields ""
"123456789"[-4:-6:1] yields ""
"123456789"[-4:-5:1] yields ""
"123456789"[-4:-4:1] yields ""
"123456789"[-4:-3:1] yields "6"
"123456789"[-4:-2:1] yields "67"
"123456789"[-4:-1:1] yields "678"
"123456789"[-4:None:1] yields "6789"
step=-1
"123456789"[-4:-7:-1] yields "654"
"123456789"[-4:-6:-1] yields "65"
"123456789"[-4:-5:-1] yields "6"
"123456789"[-4:-4:-1] yields ""
"123456789"[-4:-3:-1] yields ""
"123456789"[-4:-2:-1] yields ""
"123456789"[-4:-1:-1] yields ""
"123456789"[-4:None:-1] yields "654321"
作为脑力锻炼可以扭转字符串,需要抢分片和扭转回来。如果您遍历值:-):
"123456789"[-5:len('123456789')]
'56789'
不是序列中的最后一项。 in [1]: for i in range(1, 6):
...: print('123456789'[::-1][:i][::-1])
...:
9
89
789
6789
56789
势必顺序的,当你改变方向,你得到了预期的结果。
None
作为@Daniel Mesejo观察到的,如果我已经准备好使用恒定None
,我可以如用LEN(S)或为@Salai Madhavan先生观察到:任何数量非常大,这将自动地被转换为len(一个或多个)。
>>> s = "1234567890"
>>> s[-5::1]
'67890'
>>> s[-5::-1]
'654321'
>>> s[-5:len(s):1]
'67890'
>>> s[-5:len(s):-1]
''
将产生
None