我经常发现自己不得不处理序列中的最后n项,其中n可能是0。问题是尝试使用[-n:]
切片在n == 0
的情况下不起作用,因此需要笨拙的特殊情况代码。
if len(b):
assert(isAssignableSeq(env, self.stack[-len(b):], b))
newstack = self.stack[:-len(b)] + a
else: #special code required if len=0 since slice[-0:] doesn't do what we want
newstack = self.stack + a
我的问题是--有没有什么方法可以在不需要笨拙的特殊大小写的情况下获得这种行为?如果我不需要一直检查0,代码会简单得多。
5条答案
按热度按时间ttisahbt1#
只需使用
or
的合并行为。**解释(来自注解):**在您的示例中,如果
len(b)
为0
,则self.stack[:(-len(b) or None)]
会简化为self.stack[:None]
,而0
又会简化为self.stack[:]
q9rjltbz2#
您可以将其从
L[-2:]
切换到L[len(L)-2:]
z5btuh9x3#
当你发现自己不止一次地使用一个结构时,把它变成一个函数。
EOL在评论中建议的更简单的版本:
nr9pn0ug4#
这可能是可怕的效率低下,由于双重颠倒,但希望有一些东西的想法,颠倒顺序,使索引更容易:
退货:
11dmarpk5#
你可以在里面加个条件句
我认为这个版本不太清楚。你应该沿着旁边加上评论