我想从 0 ... n
创建一个范围 x
,不包含列表 y
中的任何数字。我该怎么做?
例如:
n = 10
y = [3, 7, 8]
x = # Do Something
应该给出输出:
x = [0, 1, 2, 4, 5, 6, 9]
一种简单的方法是连接多个范围,每个范围跨越一组数字,这些数字与 y
中的数字相交。但是,我不确定在 Python 中执行此操作的最简单语法是什么。
最佳答案
您可以使用列表理解来过滤从 0
到 n
的范围:range(n)
生成一个列表(或者,在Python 3,一个生成器对象)从0
到n - 1
(包括两端):
x = [i for i in range(n) if i not in y]
这从范围中过滤掉 y
中的所有数字。
您还可以通过将 [
替换为 (
和 ]
与 )
。此外,在 Python 2 中,您可以使用 xrange
而不是 range
来避免一次将整个范围加载到内存中。此外,特别是如果 y
是一个大列表,您可以先将它变成一个 set
以使用 O(1) 成员检查而不是 <list
或 tuple
对象上的 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/