Как суммировать столбцы в списке с текстовыми полями - PullRequest
3 голосов
/ 11 февраля 2011

Скажем, у меня есть список Python, как показано ниже:

list =  [ ['text',2,3,4], ['text2',4,5,6] ]
y= map(sum,zip(*list))
print y 

Дает int / str ошибку.

Как бы я вытолкнул весь текст во все строки и суммировал оставшиеся столбцы Ответ: Я ищу [6, 8, 10] Я заметил, что поле выглядит как int, но это str. 4 против «4».

Ответы [ 4 ]

4 голосов
/ 11 февраля 2011
In [111]: lst =  [ ['text',2,3,4], ['text2',4,5,6] ]

In [112]: import operator

In [113]: print(map(operator.add,*lst))
['texttext2', 6, 8, 10]

Если вы не знаете априори , в каких столбцах содержится текст, вы можете использовать блок try..except для обработки текста:

lst =  [ ['text',2,3,4], ['text2',4,5,6] ]
result=[]
for column in zip(*lst):
    try:
        result.append(sum(map(int,column)))
    except ValueError:
        pass
print(result)
# [6, 8, 10]
3 голосов
/ 11 февраля 2011
>>> map(sum, zip(*list)[1:])
[6, 8, 10]

>>> list =  [ ['text','2','3','4'], ['text2','4','5','6'] ]
>>> map(sum , [map(int,i) for i in zip(*list)[1:]] )
[6, 8, 10]
>>>
1 голос
/ 11 февраля 2011
y = map(lambda x: sum(int(k) for k in x[1:]),
        zip(*list))

Если вы также ожидаете десятичные дроби, вы можете изменить его на float() вместо int()

0 голосов
/ 11 февраля 2011
def tail(l):
    return l[1:]

map(sum, zip(*map(tail, list))

Примечание: в последнее время я слишком много делал на Хаскеле. ; -)

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