指数从它串片的一端与Python中的变量不提供通用的存取权限最后一个元素

问题描述 投票:1回答:4

这个问题是不是另一种方式来解决问题,而是关于语法的存在堵塞的孔。我知道还有很多其他的方法可以做到这一点,但它不是我感兴趣的东西。

“:”的方括号内的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

有另一种方式来指定我的片进入到最后的位置,而不是默认位置?

python sequence slice
4个回答
1
投票

如果切片的停止值大于或等于该字符串的长度,它将被设置为默认的字符串的长度。

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"


1
投票

作为脑力锻炼可以扭转字符串,需要抢分片和扭转回来。如果您遍历值:-):

"123456789"[-5:len('123456789')]

0
投票

'56789'不是序列中的最后一项。 in [1]: for i in range(1, 6): ...: print('123456789'[::-1][:i][::-1]) ...: 9 89 789 6789 56789 势必顺序的,当你改变方向,你得到了预期的结果。

None

0
投票

作为@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
© www.soinside.com 2019 - 2024. All rights reserved.