如何在不创建巨大列表的情况下排除某个范围内的数字?
例如,如何获取 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/