这是从蚱rh犀牛的阵列中过滤特定点。这就是我尝试过的。
t = 4
u = 11
b = []
for i in range(t*u):
if i % 2 == 0:
b.append(i)
print(b)
我想弄清楚数字(图片中的高绿色)
[0, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 21, 22, 24, 26, 28, 30, 32, 33, 35, 37, 39, 41, 43]
不是这个
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42]
答案 0 :(得分:1)
如果您希望使用迭代来执行此操作,则逐列解决该问题更有意义。
t = 4
u = 11
result = []
for col in range(t):
result.extend(range(col*u, (col+1)*u, 2)) #run through 11 numbers starting from the offset of col*u (0*11, 1*11, 2*11 and so on) with an step size of 2.
print(result)
#Output:
[0, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 21, 22, 24, 26, 28, 30, 32, 33, 35, 37, 39, 41, 43]
答案 1 :(得分:0)
[[i + 11*n for n in range(4)] for i in range(0, 11, 2)]
将返回:
[[0, 11, 22, 33],
[2, 13, 24, 35],
[4, 15, 26, 37],
[6, 17, 28, 39],
[8, 19, 30, 41],
[10, 21, 32, 43]]
如果要在一个简单列表中使用,请使用itertools.chain:
list(itertools.chain.from_iterable(
zip(*[
[i + 11*n for n in range(4)]
for i in range(0, 11, 2)
])
))
将返回:
[0, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 21, 22, 24, 26, 28, 30, 32, 33, 35, 37, 39, 41, 43]
答案 2 :(得分:0)
itertools.chain
来营救!
您有4个连续的序列,从11 * i到11 *(i + 1)步进2:
result = list(itertools.chain(*(range(11*i, 11*(i+1), 2) for i in range(4))))
它给出:
[0, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 21, 22, 24, 26, 28, 30, 32, 33, 35, 37, 39, 41, 43]
答案 3 :(得分:0)
您可以使用:
t = 4
u = 11
b = [x for x in range(t*u) if (x%u)%2 == 0]
print(b)
输出:
[0, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 21, 22, 24, 26, 28, 30, 32, 33, 35, 37, 39, 41, 43]
EXPLANATION:
您需要一个从0
到u
的范围。
此范围将重复t
次。
如果您考虑使用t == 1
,则需要使用备用数字。由于您始终从0
开始,因此这意味着所有偶数(因此n%2 == 0
)。
如果您有第二个循环(t == 2
),则范围为0+u
至u+u
。由于我们想将此范围设为已知条件(range(0,u)
),因此我们可以应用n%2 == 0
,我们在迭代中将每个整数除以u
,因此其余整数对应于该值在range(0,u)
的同一步骤中。
示例:
我们可以取整个范围(t*u
)中的所有数字:
full_range = [x for x in range(t*u)] # output: [0, 1, 2, 3, 4, 5,...43]
将所有这些数字减少到基本范围(range(0,u
):
basic_range = [y%u for y in full_range]
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [z%2 == 0 for z in basic_range]
输出:
[True, False, True, False, True, False, True, False, True, False, True, True, False, True, False, True, False, True, False, True, False, True, True, False, True, False, True, False, True, False, True, False, True, True, False, True, False, True, False, True, False, True, False, True]
您会看到带有True
的索引就是您要选择的数字;因此,如果您将这些条件应用于全部范围(range(0,t*u)
),并且仅选择满足条件的整数,则将获得数字列表。
在评论中,您表示有必要也每11个数字都跳过一次。
按照前面的说明,我们可以添加条件(x%u) != 10
:
[x for x in range(t*u) if (x%u)%2 == 0 and (x%u) != 10]
输出:
[0, 2, 4, 6, 8, 11, 13, 15, 17, 19, 22, 24, 26, 28, 30, 33, 35, 37, 39, 41]
答案 4 :(得分:0)
该级数也可以表示为f(n)= 2n-n // 6
r = [2*i - i//6 for i in range(24)]
# [0, 2, 4, 6, 8, 10, 11, 13, 15, 17, 19, 21, 22, 24, 26, 28, 30, 32, 33, 35, 37, 39, 41, 43]