我对Python很新,这是一个相当基本的问题.
我有一个名单lst,并已在一些点计算的整数n用0<=n<=len(lst),告诉我说,(在手的目的),我应该放弃最后n名单的元素.想到达到这个目的的说法是del lst[-n:]或者lst[-n:]=[](我发现在任何一种情况下0,在冒号之后添加不是一个好主意,因为零不被认为大-n于此设置).但是n==0,当列表完全清空时,两种变体都会失败.我真的应该在这里插入一个明确的零测试,或者弯腰写作
del lst[len(lst)-n:]
Run Code Online (Sandbox Code Playgroud)
还是有更优雅(可靠)的东西可以在这里完成?
在考虑了其他建议的可能性之后,我得出的结论是
del lst[len(lst)-n:] # do not remove the len(lst) since n==0 is possible !
Run Code Online (Sandbox Code Playgroud)
非常干净。的计算len(lst)可能不是很美观,但它所代表的成本可以忽略不计。
后来添加:这里的问题源于这样一个事实,即索引表达式作为边界“从右侧计数”的解释是根据表达式的运行时值(即它是负数)动态确定的,以及事实值 0 已被用作指示最左边界,但不能也表示最右边界。如果该特征是根据句法特征确定的,那么完全有可能在没有显式算术的情况下指定i从右侧开始的边界,其中i很可能为 0。不可能编写单个表达式,其中某些边界在它有时从左解释,有时从右解释,具体取决于运行时状态,但这是人们几乎不想做的事情。