#python #arrays #random
#python #массивы #Случайный
Вопрос:
Следующий код генерирует случайное число 2d-массивов, и я хочу напечатать, сколько значений в каждой паре делится на 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)
Комментарии:
1. Вы имеете в виду, что
[2, 10]
,[1, 6]
и[4, 8]
являются интервалами , и вы хотите вычислить, сколько целых чисел в каждом интервале делится на 3?2. ДА. Это правильно
Ответ №1:
Один из способов — подсчитать, сколько целых чисел в интервале делится на 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])
Ответ №2:
Вы можете использовать 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
Комментарии:
1. Спасибо, и как мы можем найти общее количество значений, которые имеют идеальный квадрат во всех парах.
2. Большое спасибо. что, если я хочу напечатать количество делимых и идеальный квадрат каждой пары без их суммирования. например, для первой пары выведите 3 2, где 3 — число делимых, а 2 — число совершенных квадратов.
3. Именно поэтому ответы только для кода не полезны новичкам. Научите человека ловить рыбу и еще много чего.
4. @user14263018 Смотрите мой EDIT2.
5. @user14263018 Вы, вероятно, имели в виду
print('{}'.format(sum((v % 3 == 0) and is_square(v) for v in range(a, b 1))))
, что будет напечатано количество чисел, которые являются идеальными квадратами И делятся на 3.