省略一个范围中的一个值

时间:2014-06-23 13:42:49

标签: python range idioms

Python中最简洁的方法是编写一个省略单个值的范围(生成器或列表)。因此,给定整数nk 0k< n我希望所有整数从0(包括)到{{ 1}}(独家),但没有n

4 个答案:

答案 0 :(得分:3)

由于您的列表从0到n,我们知道列表n中的所有值nsns.index(n) == n。 (ns[0] == 0ns[1] == 1等等。)

考虑到这一点,您可以通过这种方式对列表进行切片:

ns = range(n)
ms = ns[:k] + ns[k+1:]

可以说更短,但也可以说不太清楚,所以取决于你!

答案 1 :(得分:2)

到目前为止我找到的最短解决方案是

[i for i in range(n) if i != k]

但也许还有更短的东西。这里的一个问题是,在Python 2中,变量i会渗透到周围的范围内,这在某些情况下会很烦人。

答案 2 :(得分:2)

比列表理解解决方案略短:

sorted(set(range(n))-{k})

......但在我看来,可能不那么快或难以理解。

答案 3 :(得分:1)

如果您希望结果再次成为生成器:

filter(k.__ne__, range(n))

(比Kevin's set operation approach长一个字符,但可能更高效,也许还有更好的性能。另外,恕我直言,更好的语义适合手头的任务。另一方面,访问低级别-ish .__ne__可能会违反"有点可读的目标,具体取决于受众群体。)