Списки: cреднее арифметическое и сравнение элементов
Дан одномерный список. Вводим вручную. Нужно найти номер элемента, который менее других отличающегося от среднего арифметического; найти сумму элементов списка, расположенных между первым и вторым положительными элементами.
Попробовал вот так:
#ввод элементов массива
print('Введите элементы массива')
my_list = [float(x)for x in input().split()]
my_select_min = []
my_select_max = []
#количество чисел
print('Введите количество элементов в массиве')
n = int(input())
#вычислим среднее арифметическое и индекс числа
b = sum(my_list)
c = b/n
for a in my_list:
if a <= c:
my_select_min.append(a)
max = max(my_select_min)
if a >= c:
my_select_max.append(a)
min = min(my_select_max)
if c-min < max-c:
print(my_list.index(min))
else: print(my_list.index(max))
Это первая часть кода (моя) и в нем ошибка line 24, in min = min(my_select_max)
TypeError: 'float' object is not callable
Далее код уже не мой, гугланул. Вроде считает, но не могу понять, почему неверно.
#пробуем посчитать сумму между положительными элементами
s = 0
neg = -1
for n,i in enumerate(my_list):
if n < 0:
neg = i
break
for n in my_list[neg+1:]:
s += abs(n)
print(s)
Не пойму, что нужно еще добавить, чтобы корректно считало
Спасибо
Ответы (1 шт):
Вы сильно усложняете решение задачи
# среднее арифметическое:
my_list = [float(x)for x in input().split()]
mean = sum(my_list)/len(my_list)
Допустим, ввели список:
my_list = [1.0, -1.5, 2.4, -1, -3]
тогда:
mean = sum(my_list)/len(my_list) # -0.42000000000000004
Далее, индекс ближайшего числа к среднему арифметическому:
closest = sorted(list(enumerate(my_list)), key=lambda x: abs(x[1]-mean))[0][0]
в нашем случае closest будет 3. Действительно, число с индексом 3 ближе всего к среднему арифметическому
Теперь вычисляем сумму между первыми положительными числами списка (в данном случае, включая сами эти числа):
Для начала отбираем все положительные числа из списка и получаем их индексы:
positive = [x for x in enumerate(my_list) if x[1]>0][:2]
# positive будет [(0, 1.0), (2, 2.4)]
Затем берем индексы этих чисел и вычисляем сумму значений в срезе исходного списка:
positive_sum = sum(my_list[positive[0][0]:positive[1][0]+1])
получаем 1.9
Действительно, первые два положительных числа нашего списка - 1.0 и 2.4. Сумма между ними, включая сами числа : 1.0 + (-1.5) + 2.4 = 1.9
Если нужно найти сумму элементов между первыми положительными значениями, не включая эти самые значения, то тогда делаем так:
positive_sum = sum(my_list[positive[0][0]+1:positive[1][0]])
Получаем -1.5
Итого, все ваши вычисления сводятся к 5 строкам кода.