除了第一个,列出列表列表中的所有元素

时间:2017-10-31 06:14:11

标签: python list

添加除第一个元素之外的列表列表中的所有元素并创建一个新列表。

  l = [[u'Security', -604.5, -604.5, -604.5, 
       -302.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2115.75], 
       [u'Medicare', -141.38, -141.38, -141.38, -70.69, 
       0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -494.83], 
       [u'Insurance', -338.0, -338.0, -338.0, -169.0, 0.0, 
       0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1183.0]]

输出应该看起来像

['total',-1083.88,-1083.88,-1083.88,-541.94,0.0,0.0,0.0,0.0,0.0,0.0,
   0.0,0.0,-3793.58]

例如:输出列表的-1083.88 = -604.5 +( - 141.38)+( - 338.0)= - 1083.88

我试过这样的

for i in r:
   del(i[0])
total = [sum(i) for i in zip(*r)]

先谢谢。

4 个答案:

答案 0 :(得分:5)

根据您的预期输出,我相信您正在寻找换位并对列进行求和。您可以使用zip

r = [sum(x) if not isinstance(x[0], str) else 'total' for x in zip(*l)]

print(r)
['total', -1083.88, -1083.88, -1083.88, -541.94, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -3793.58]

或者,将转置转换为list,您可以避免if检查(这类似于MaximTitarenko's answer,因此也要归功于它们。)

r = [sum(x) for x in list(zip(*l))[1:]]
r.insert(0, 'total')

或者,如果您愿意,

r = ['total'] + [sum(x) for x in list(zip(*l))[1:]]

哪个不那么优雅。

答案 1 :(得分:3)

你可以试试这个:

result = ['total'] + [sum(el) for el in list(zip(*l))[1:]] 

print(result)
# ['total', -1083.88, -1083.88, -1083.88, -541.94, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -3793.58]

答案 2 :(得分:2)

要使用所有python风格,您需要使用itertools.islice,因为在Python zip()中返回迭代器,而您不能只是[1:]下标zip对象。

In [1]: l = [[u'Security', -604.5, -604.5, -604.5,
   ...:    ...:        -302.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2115.75
   ...: ],
   ...:    ...:        [u'Medicare', -141.38, -141.38, -141.38, -70.69,
   ...:    ...:        0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -494.83],
   ...:    ...:        [u'Insurance', -338.0, -338.0, -338.0, -169.0, 0.0,
   ...:    ...:        0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1183.0]]
   ...:

In [2]: from itertools import islice

In [3]: total = [sum(new) for new in islice(zip(*l), 1, None)]

In [4]: total
Out[4]:
[-1083.88, -1083.88, -1083.88, -541.94, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -3793.58]

'total'纳入评论中明确指出的cᴏʟᴅsᴘᴇᴇᴅ

In [5]: ['total'] + total
Out[6]:
    ['total', -1083.88, -1083.88, -1083.88, -541.94, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -3793.58]

答案 3 :(得分:0)

如果你想真正有效率,你可以使用itertools' islice

from itertools import islice, repeat
s = map(sum, zip(*map(islice, l, repeat(1), repeat(None) ) ) )
total = ['total']
total.extend(s)

编辑:抱歉,第一次没有阅读整个上下文:)