[英]How to find how many values are divisible in to certain value in 2d array in python
以下代码生成随机数的二维数组,我想打印每对中有多少个值可以被 3 整除。例如,假设我们有一个数组 [[2, 10], [1, 6], [4, 8] ]。 因此,第一对 [2,10] 有 3 ,6 和 9,它们完全是 3,第二对有 3 和 6,它们完全是两个,最后一对 [4,8] 只有 1 可以被 3 整除,也就是 6。因此,最终输出应打印可整除值总数的总和,即 3+2+1=6
a=random.randint(1, 10)
b = np.random.randint(1,10,(a,2))
b = [sorted(i) for i in b]
c = np.array(b)
counter = 0;
for i in range(len(c)):
d=(c[i,0],c[i,1])
if (i % 3 == 0):
counter = counter + 1
print(counter)
一种方法是通过测试每个整数来计算区间中有多少个整数可以被 3 整除。
另一种方法,如果你的间隔很大,这会更有效,那就是使用数学。
取区间[2, 10]
。
2 / 3 = 0.66; ceil(2 / 3) = 1
2 / 3 = 0.66; ceil(2 / 3) = 1
。
10 / 3 = 3.33; floor(10 / 3) = 3
10 / 3 = 3.33; floor(10 / 3) = 3
。
现在我们需要计算 0.66 到 3.33 之间存在多少个整数,或者计算 1 到 3 之间存在多少个整数。嘿,这听起来很像减法! (然后添加一个)
让我们把它写成一个函数
from math import floor, ceil
def numdiv(x, y, div):
return floor(y / div) - ceil(x / div) + 1
所以给定一个间隔列表,我们可以这样称呼它:
count = 0
intervals = [[2, 10], [1, 6], [4, 8]]
for interval in intervals:
count += numdiv(interval[0], interval[1], 3)
print(count)
或者使用列表理解和求和:
count = sum([numdiv(interval[0], interval[1], 3) for interval in intervals])
您可以使用sum()
内置任务:
l = [[2, 10], [1, 6], [4, 8]]
print( sum(v % 3 == 0 for a, b in l for v in range(a, b+1)) )
印刷:
6
编辑:计算完全平方数:
def is_square(n):
return (n**.5).is_integer()
print( sum(is_square(v) for a, b in l for v in range(a, b+1)) )
印刷:
5
编辑 2:要打印有关每个间隔的信息,只需结合上面的两个示例。 例如:
def is_square(n):
return (n**.5).is_integer()
for a, b in l:
print('Pair {},{}:'.format(a, b))
print('Number of divisible 3: {}'.format(sum(v % 3 == 0 for v in range(a, b+1))))
print('Number squares: {}'.format(sum(is_square(v) for v in range(a, b+1))))
print()
印刷:
Pair 2,10:
Number of divisible 3: 3
Number squares: 2
Pair 1,6:
Number of divisible 3: 2
Number squares: 2
Pair 4,8:
Number of divisible 3: 1
Number squares: 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.