@Smeilz1
За любое развитие

Как посчитать среднее значение по столбцам в матрице,Если не все элементы цифры?

Есть матрица, в которой все значения -цифры и буквы
x = [['a', '3', '5', '7'],
['b', '1', '2', '3'],
['д', '1, '2', '3']]
Нужно получить среднее значение для каждого столбика 5, 9, 13
Как посчитать среднее значение, если часть элементов не цифры? Там где буквы считать не нужно.
Пока нашел вариант для рандомной матрицы с заранее заданной длиной и шириной.
Там указано как считать столбики.
Вот пытаюсь ее переделать под свои значения, но не получается.
from random import random
M = 10
N = 5
a = []
for i in range(N):
    b = []
    for j in range(M):
        b.append(int(random() * 11))
        print("%3d" % b[j], end = '')
    a.append(b)
    print('   |', sum(b))

for i in range(M):
    print(" --", end = '')
print()

for i in range(M):
    s = 0
    for j in range(N):
        s += a[j][i]
    print("%3d" % s, end = '')
print()
  • Вопрос задан
  • 2312 просмотров
Решения вопроса 4
tema_sun
@tema_sun
x = [
	['a', '3', '5', '7'], 
	['b', '1', '2', '3'],
	['c', '1', '2', '3']
]

rotated = zip(*x[::-1])


for row in rotated:
	l = [int(x) for x in row if x.isdigit()]
	print sum(l)
Ответ написан
Astrohas
@Astrohas
Python/Django Developer
def get_float_or_none(string):
    try:
      return float(string)
    except ValueError:
      return None


и в цикле сделать так
number = get_float_or_none(a[i][j])
if number:
    s += number
Ответ написан
Комментировать
aRegius
@aRegius
Python Enthusiast
>>> x = [['a', '3', '5', '7'], ['b', '1', '2', '3'], ['д', '1', '2', '3']]

>>> # сортируем по столбцам
>>> x_sort = list(zip(*x))
>>> x_sort
[('a', 'b', 'д'), ('3', '1', '1'), ('5', '2', '2'), ('7', '3', '3')]

>>> # убираем лишний кортеж (с буквами)
>>> x_sort = x_sort[1:]
>>> x_sort
[('3', '1', '1'), ('5', '2', '2'), ('7', '3', '3')]

>>> # переводим строки в числа
>>> x_to_int = [list(map(int, i)) for i in x_sort]
>>> x_to_int
[[3, 1, 1], [5, 2, 2], [7, 3, 3]]

>>> # ищем среднее, округляем до сотых
>>> x_avg_sum = ['{:.2f}'.format(sum(i)/3) for i in x_to_int]
>>> x_avg_sum
['1.67', '3.00', '4.33']
Ответ написан
adugin
@adugin Куратор тега Python
Так что всё-таки нужно посчитать, сумму или среднее? Вот подсчёт сумм:
matrix = [
  ['a', '3', '5', '7'], 
  ['b', '1', '2', '3'],
  ['c', '1', '2', '3'],
]

[sum(int(item) for item in column if item.isdigit()) for column in zip(*matrix)]

Или так:
[sum(map(int, filter(str.isdigit, column))) for column in zip(*matrix)]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект