【问题标题】:How to find how many values are divisible in to certain value in 2d array in python如何在python中的二维数组中找到多少个值可以被整除
【发布时间】:2020-12-30 23:24:00
【问题描述】:

以下代码生成随机数的二维数组,我想打印每对中有多少个值可以被 3 整除。例如假设我们有一个数组 [[2, 10], [1, 6], [4 , 8]]。 因此,第一对 [2,10] 有 3 ,6 和 9,它们总共是 3,第二对有 3 和 6,它们完全是 2,最后一对 [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)

【问题讨论】:

  • 你的意思是[2, 10][1, 6][4, 8]intervals,你想计算每个区间有多少个整数可以被3整除?
  • 是的。没错

标签: python arrays random


【解决方案1】:

您可以使用 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

【讨论】:

  • 谢谢,我们如何找到所有对中具有完美平方的值的总数。
  • 非常感谢。如果我想打印每对可整除和完美平方的数量而不将它们相加怎么办。例如对于第一对打印 3 2 其中 3 是整除数,2 是完美平方数。
  • 这正是纯代码答案对初学者没有帮助的原因。教人钓鱼什么的。
  • @user14263018 查看我的 EDIT2。
  • @user14263018 你的意思可能是print('{}'.format(sum((v % 3 == 0) and is_square(v) for v in range(a, b+1)))),它会打印出完美平方且能被3整除的数字。
【解决方案2】:

一种方法是通过测试每个整数来计算区间中有多少整数可以被 3 整除。

另一种方法是使用数学,如果你的间隔很大,这会更有效。

取区间[2, 10]

2 / 3 = 0.66; ceil(2 / 3) = 1.

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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多