Python中最简洁的方法是编写一个省略单个值的范围(生成器或列表)。因此,给定整数n
和k
0
≤k
< n
我希望所有整数从0
(包括)到{{ 1}}(独家),但没有n
。
答案 0 :(得分:3)
由于您的列表从0到n,我们知道列表n
中的所有值ns
,ns.index(n) == n
。 (ns[0] == 0
,ns[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__
可能会违反"有点可读的目标,具体取决于受众群体。)