簡體   English   中英

如何在python的二維數組中找到多少個值可以整除為某個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM