生成逆序列

2024-04-16 15:47:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个序列

range(0,50,3)

[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]

这是我想生成的序列(每次不包括第3个元素),但能够从第n个数字开始和结束:

[1, 2, 4, 5, 7, 8, ...]

Tags: 元素range序列数字
3条回答

这个怎么样:

def inv_range(start, stop, step):
  for val in range(start, stop):
    if (val - start) % step != 0:
      yield val

print list(inv_range(0,50,3))

这个指纹

[1, 2, 4, 5, 7, 8, 10, 11, ...

另外,如果您使用的是python2,请将range()替换为xrange(),以获得一个常量内存解决方案。你知道吗

对于这种特殊情况:

[x for x in range(50) if x % 3]

建立一个set的你想要排除的数字,并在一个完整范围的列表中测试:

>>> checkset = set(range(0, 50, 3))
>>> [x for x in range(50) if x not in checkset]
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, 46, 47, 49]

将列表转换为一个集合并不重要,但是当您所做的只是比较时,它可以加快查找速度

相关问题 更多 >