我有一个列表,我想从后到尾提取一个子列表.有两行代码,这是
mylist = [...] mysublist = mylist[begin:end] mysublist = mysublist[::-1]
是否有切片符号在一行中获得相同的效果?这个
mysublist = mylist[end:begin:-1]
是不正确的,因为它包含结尾并排除了begin元素.这个
mysublist = mylist[end-1:begin-1:-1]
当begin为0时失败,因为begin-1现在是-1,它被解释为mylist的最后一个元素的索引.
解决方法
如果begin为0,请使用None:
mysublist = mylist[end - 1:None if not begin else begin - 1:-1]
无意味着’默认’,与省略值相同.
您始终可以将条件表达式放在单独的行中:
start,stop,step = end - 1,None if not begin else begin - 1,-1 mysublist = mylist[start:stop:step]
演示:
>>> mylist = ['foo','bar','baz','eggs'] >>> begin,end = 1,3 >>> mylist[end - 1:None if not begin else begin - 1:-1] ['baz','bar'] >>> begin,end = 0,'foo']