python - python 范围是否有 'anti-step' ? range(0, 100, n) 给出每个第 n 个数字,如果我想排除每个第 n 个数字怎么办?

标签 python range

如何在不创建巨大列表的情况下排除某个范围内的数字?

例如,如何获取 1、100 中的所有数字,但排除第 n 个数字?

如果有多个 n 呢?例如,排除每 3 个和每 11 个数字。

最好的方法是什么?

使用 if 语句并附加到列表很容易,但是对于任何大尺寸的范围来说这变得毫无用处,因为我不想要一个包含一百万个项目的列表。

基本上我有一个非常大的数字范围,我想排除那些能被 3 整除的数字。

使用 if 语句并检查每个数字的 %3 效率也很低

Python 中的一切看起来都很简单,似乎我应该能够跳过每第三个数字,但很多谷歌搜索让我没有答案。

有没有简单有效的方法来做到这一点?

最佳答案

只需将对 range 的调用括在生成器表达式中,然后使用带有模运算符的表达式对不需要的数字应用过滤器即可。

for number in (number in range(10) if number % 3):
    ...

如果您需要 getitem 和包含测试,请将其改为列表理解:

数字 = [范围内的数字 (10) 如果数字 % 3]

请注意,生成器表达式是创建生成器的快捷方式 - 如果需要更复杂的规则,可以随时创建生成器函数 - 一个产生结果的函数,可以直接在 for< 中使用 语句以及任何需要迭代器的地方。

def myrange(start, stop, step, antistep=None):
    for item in range(start, stop, step):
         if item % antistep == 0:  # or any other expression
             continue  # just skip this item
         yield item


for count in myrange(0, 100, 5):
    ...

关于python - python 范围是否有 'anti-step' ? range(0, 100, n) 给出每个第 n 个数字,如果我想排除每个第 n 个数字怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74366426/

相关文章:

Int 的 Scala 序列

arrays - 如何按排序顺序获取重叠范围的计数?

javascript - 将范围扩展到 url

python - Tableau 数据提取(.tde 文件)中可以放入多少个表?

python - 在终端中给出导入 tfrecord 文件的正确路径

python - 获取 np.linalg.svd 的奇异值作为矩阵

Python - 检查当前是否正在处理异常

python - 如何分割紧凑数据

javascript - 如何修复 Firefox contenteditable 自动换行?

java - 双倍值太大