我需要创建一个范围,跳过每4个数字,从5开始。例如,如果范围a是从1到20,那么数字5,9,13,17将被排除。
a = [1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20]
我尝试的是创建一个常规范围,然后创建包含我想要跳过的数字的第二个范围,然后从第一个范围中删除第二个范围。
a = list(range(1,21))
b = list(range(5,21,4))
for x in b:
if x in a:
a.remove(x)
这是可行的,但不适用于非常大的范围。有没有更有效的方法呢?
发布于 2018-08-03 09:17:36
您可以使用下面的列表理解:
>>> print ([v for i, v in enumerate(range(1,21)) if i == 0 or i % 4 != 0])
[1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20]
发布于 2018-08-03 09:28:41
如果我们考虑numpy
import numpy as np
a=np.arange(1,21)
a[np.logical_or(a%4!=1,a==1)]
Out[209]: array([ 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20])
发布于 2018-08-03 09:10:05
也许是一组不同?
numItems = 21
r1 = set(range(1,numItems))
r2 = set(range(5,numItems,4))
r3 = list(r1 - r2)
https://stackoverflow.com/questions/51663979
复制相似问题