5

我对 Python 很陌生,这是一个相当基本的问题。

我有一个列表lst,并在某个时候计算了一个整数n0<=n<=len(lst)它告诉我(出于手头的目的)我应该丢弃n列表的最终元素。想到实现这一点的语句是del lst[-n:]或者可能lst[-n:]=[](我发现在任何一种情况下0,在冒号之后添加都不是一个好主意,因为零不被认为大-n于此设置)。然而,两个变体在 时都失败了n==0,因为列表被完全清空了。我真的应该在这里插入一个明确的零测试,还是弯下腰来写

del lst[len(lst)-n:]

还是可以在这里做一些更优雅(和可靠)的事情?

4

1 回答 1

3

在考虑了建议的其他可能性后,我得出结论

del lst[len(lst)-n:]  # do not remove the len(lst) since n==0 is possible !

尽可能干净。的计算len(lst)可能不是很漂亮,但它所代表的成本可以忽略不计。

很久以后补充:这里的问题源于这样一个事实,即索引表达式的解释为“从右数”的边界,是由表达式的运行时值(即它是负数)动态确定的,以及事实值 0 已被用作指示最左边的边界,不能也表示最右边的边界。如果特征是从句法特征中确定的,那么完全有可能在没有明确算术的情况下指定i从右边开始的边界,其中i很可能是 0。不可能编写一个表达式,其中某些绑定有时从左侧解释,有时从右侧解释,具体取决于运行时状态,但无论如何,这是一个几乎不想做的事情。

于 2013-04-17T12:16:49.510 回答