python - 创建没有特定数字的范围

标签 python range

我想从 0 ... n 创建一个范围 x,不包含列表 y 中的任何数字。我该怎么做?

例如:

n = 10
y = [3, 7, 8]
x = # Do Something

应该给出输出:

x = [0, 1, 2, 4, 5, 6, 9]

一种简单的方法是连接多个范围,每个范围跨越一组数字,这些数字与 y 中的数字相交。但是,我不确定在 Python 中执行此操作的最简单语法是什么。

最佳答案

您可以使用列表理解来过滤从 0n 的范围:range(n) 生成一个列表(或者,在Python 3,一个生成器对象)从0n - 1(包括两端):

x = [i for i in range(n) if i not in y]

这从范围中过滤掉 y 中的所有数字。

您还可以通过将 [ 替换为 (])。此外,在 Python 2 中,您可以使用 xrange 而不是 range 来避免一次将整个范围加载到内存中。此外,特别是如果 y 是一个大列表,您可以先将它变成一个 set 以使用 O(1) 成员检查而不是 <listtuple 对象上的 em>O(n)。这样的版本可能看起来像

s = set(y)
x = (i for i in range(n) if i not in s)

关于python - 创建没有特定数字的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368493/

相关文章:

python - 在 Python 中通过 Xlib 找出鼠标按钮状态

python - 在打印变量类型时,如何在 Tensorflow 中获得 pretty-print 结果?

python - BeautifulSoup无法在Python的多线程程序中工作

for-loop - 是否可以在 Int swift 处于特定范围内时执行 for 循环?

c++ - 用一个范围(一对迭代器)初始化 std::array

python - 在mako模板: call python function within html string中

python - Bokeh 重叠条形图?

postgresql - Postgis 数据库 : How can I get all gps points between specified timestamps and specified region?

templates - 转到模板 : two or more slices ranges

在给定图中查找具有最小范围的生成树的算法