2011-02-11 35 views
3

說我下面已經Python列表:如何處理文本字段列表總結列

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

給人INT/STR錯誤。

我將如何彈出所有行中的所有「文本」並對其餘列進行求和。 Ans:我在尋找[6,8,10] 我注意到這個字段看起來像int,但是是str。 4對'4'。

+1

第一列總是文字,其餘的總是數字?這是來自speadsheet/CSV文件嗎? – Mikel 2011-02-11 01:33:47

+0

@米克爾,1號和7號......如果能夠說出來,我可以切片,我需要它。 – Merlin 2011-02-11 01:39:32

回答

4
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] 
1
y = map(lambda x: sum(int(k) for k in x[1:]), 
     zip(*list)) 

如果你也期待小數,你可以把它改成float()代替int()

+0

給了我[0,0,0,0] – Merlin 2011-02-11 01:25:56

+0

哦......你的「數字」實際上是字符串...這使事情更煩人。將嘗試編輯的東西,將爲此工作。 – Amber 2011-02-11 07:03:41

3
>>> 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] 
>>> 
0
def tail(l): 
    return l[1:] 

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

注意:我最近做了太多的Haskell。 ;-)