Как перебирать столбцы в списке списков и изменять значения без Pandas - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь вычесть все поплавки в каждом столбце отдельно, а затем сложить их. Я получаю столбец, когда я print(column[1]), но когда я использую другой for l oop, он перебирает элементы в строках вместо столбцов.

Как можно перебирать элементы в столбце? Я не хочу использовать Pandas.

for column in list_of_lists:
    for i in column:
        sum_of_squares = 0
        try:
            square_single = i**2
            sum_of_squares += square_single
            #print(square_single)
        except TypeError:
            pass

list_of_lists:

[['', 'appeltaart', 'appelstruif', 'amandelbeschuit', 'brood'],
 ['appel', 3.0, 4.0, 0.0, 0.0], 
 ['gaar', 2.0, 2.0, 0.0, 1.0],
 ['schotel', 2.0, 4.0, 0.0, 0.0],
 ['amandel', 0.0, 0.0, 4.0, 0.0],
 ['deeg', 1.0, 0.0, 2.0, 5.0],
 ['brood', 0.0, 0.0, 0.0, 1.0],
 ['suiker', 0.0, 2.0, 2.0, 0.0]]

Ответы [ 3 ]

0 голосов
/ 28 января 2020

Может быть полезно разбить это на несколько шагов: преобразовать список списков в стиле таблицы в список строк, содержащий только те значения, с которыми вы хотите работать, затем транспонировать строки в столбцы и, наконец, найти сумма квадратов для каждого столбца.

table = [['', 'appeltaart', 'appelstruif', 'amandelbeschuit', 'brood'], ['appel', 3.0, 4.0, 0.0, 0.0], ['gaar', 2.0, 2.0, 0.0, 1.0], ['schotel', 2.0, 4.0, 0.0, 0.0], ['amandel', 0.0, 0.0, 4.0, 0.0], ['deeg', 1.0, 0.0, 2.0, 5.0], ['brood', 0.0, 0.0, 0.0, 1.0], ['suiker', 0.0, 2.0, 2.0, 0.0]]

rows = [row[1:] for row in table[1:]]
columns = zip(*rows)
sum_of_squares = [sum(x ** 2 for x in c) for c in columns]
print(sum_of_squares)
# [18.0, 40.0, 24.0, 27.0]
0 голосов
/ 28 января 2020

Вы можете использовать встроенную функцию zip(), чтобы транспонировать строки и столбцы данных, а затем sum() квадрат каждого из значений в каждом столбце результат этого.

Вот что я имею в виду:

def sum_squares(lol):
    columns = (v for v in zip( *[col[0] for col in zip(lst[1:] for lst in lol[1:])]))
    return [sum(val**2 for val in col) for col in columns]


list_of_lists = [['', 'appeltaart', 'appelstruif', 'amandelbeschuit', 'brood'],
                 ['appel', 3.0, 4.0, 0.0, 0.0],
                 ['gaar', 2.0, 2.0, 0.0, 1.0],
                 ['schotel', 2.0, 4.0, 0.0, 0.0],
                 ['amandel', 0.0, 0.0, 4.0, 0.0],
                 ['deeg', 1.0, 0.0, 2.0, 5.0],
                 ['brood', 0.0, 0.0, 0.0, 1.0],
                 ['suiker', 0.0, 2.0, 2.0, 0.0]]


result = sum_squares(list_of_lists)
print(result)  # -> [18.0, 40.0, 24.0, 27.0]
0 голосов
/ 28 января 2020

Это маленький варвар c, но вы можете попробовать это:

list_of_lists = [
    ['', 'appeltaart', 'appelstruif', 'amandelbeschuit', 'brood'],
    ['appel', 3.0, 4.0, 0.0, 0.0],
    ['gaar', 2.0, 2.0, 0.0, 1.0],
    ['schotel', 2.0, 4.0, 0.0, 0.0],
    ['amandel', 0.0, 0.0, 4.0, 0.0],
    ['deeg', 1.0, 0.0, 2.0, 5.0],
    ['brood', 0.0, 0.0, 0.0, 1.0],
    ['suiker', 0.0, 2.0, 2.0, 0.0]
]

print([sum(row[col]**2 for row in list_of_lists if isinstance(row[col], float)) for col in range(1, len(list_of_lists[0]))])

Вывод:

[18.0, 40.0, 24.0, 27.0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...