Python 从范围中省略一个值
Python中编写忽略一个值的范围(生成器或列表)的最简洁方法是什么。因此,给定整数Python 从范围中省略一个值,python,range,idioms,Python,Range,Idioms,Python中编写忽略一个值的范围(生成器或列表)的最简洁方法是什么。因此,给定整数n和k以及0≤k到目前为止,我找到的最短解决方案是 [i for i in range(n) if i != k] 但也许还有更简短的。这里的一个问题是,在Python2中,变量i流入周围的范围,这在某些情况下可能会很烦人。由于列表从0到n运行,我们知道对于列表ns中的所有值n,ns.index(n)=n。(ns[0]==0,ns[1]==1,依此类推。) 考虑到这一点,您可以通过以下方式分割列表: ns =
n
和k
以及0
≤k
到目前为止,我找到的最短解决方案是
[i for i in range(n) if i != k]
但也许还有更简短的。这里的一个问题是,在Python2中,变量
i
流入周围的范围,这在某些情况下可能会很烦人。由于列表从0到n运行,我们知道对于列表ns
中的所有值n
,ns.index(n)=n
。(ns[0]==0
,ns[1]==1
,依此类推。)
考虑到这一点,您可以通过以下方式分割列表:
ns = range(n)
ms = ns[:k] + ns[k+1:]
可以说更短,但也可以说不那么清晰,所以由你决定 略短于列表理解解决方案:
sorted(set(range(n))-{k})
。。。但在我看来,可能没有那么快,也不容易理解。如果您希望结果再次成为生成器:
filter(k.__ne__, range(n))
(一个字符比另一个字符长,但可能内存效率更高,性能也可能更好。此外,IMHO是一个更适合当前任务的语义。另一方面,访问低级ish
。\uu ne\uuuu
可能会违反“稍微可读”的目标,具体取决于受众。)“可能有一些更短的内容。”是的,如果i!=k,则有[code>[i代表范围(n)内的i];-)有什么原因让你需要用Python写这篇文章的最短方法吗?@ZeroPiraeus:只是好奇而已。因此,不要认为这是一个严格的最佳意义上的代码高尔夫球;它必须保持实用性、可读性和适合日常使用。