【问题标题】:Sum item inside a tuple对元组中的项目求和
【发布时间】:2013-11-19 16:58:55
【问题描述】:

我有一个嵌套元组列表,其中第二个元素是浮点数:

l = [('drink', ['vodka', '9.2', 'beer', '6.3', 'alcohol', '5.4', 'gin', '2.1', 'liquid']), 
('evict', ['tenant', '66.0', 'squatter', '2.75', 'owner', '1.1', 'bum', '1.0', 'deadbeat', '1.0'])]

我想将列表中的前三个项目相加,并将结果附加到开头,如下所示:

l = [('drink', 20.9 ['vodka', '9.2', 'beer', '6.3', 'alcohol', '5.4', 'gin', '2.1']), 
('evict', 69.75 ['tenant', '66.0', 'squatter', '2.75', 'bum', '1.0', 'deadbeat', '1.0'])]

我正在使用下面的代码:

sorted_by_sum=[]
for t in l:
    tup=[t[0]]
    tup.append(t[1])
    tup.append(sum(float(x) for x in t[0][1:6:2]))
    sorted_by_sum.append(tuple(tup))

但我弄错了:

ValueError: could not convert string to float: 'a'

关于如何纠正这个问题的任何提示?我非常感谢你。

【问题讨论】:

    标签: python python-3.x sum tuples


    【解决方案1】:

    你想访问元组的 second 元素来求和;不是t[0](字符串):

    tup.append(sum(float(x) for x in t[1][1:6:2]))
    

    但将其设为第一个 .append() 语句,而不是第二个。

    你可以将整个循环变成一个列表推导,使用元组解包来为每个元组的两个元素提供更容易遵循的名称:

    sorted_by_sum = [(name, sum(float(x) for x in items[1:6:2]), items) 
                     for name, items in l]
    

    演示:

    >>> l = [('drink', ['vodka', '9.2', 'beer', '6.3', 'alcohol', '5.4', 'gin', '2.1', 'liquid']), 
    ... ('evict', ['tenant', '66.0', 'squatter', '2.75', 'owner', '1.1', 'bum', '1.0', 'deadbeat', '1.0'])]
    >>> [(name, sum(float(x) for x in items[1:6:2]), items) for name, items in l]
    [('drink', 20.9, ['vodka', '9.2', 'beer', '6.3', 'alcohol', '5.4', 'gin', '2.1', 'liquid']), ('evict', 69.85, ['tenant', '66.0', 'squatter', '2.75', 'owner', '1.1', 'bum', '1.0', 'deadbeat', '1.0'])]
    

    【讨论】:

    • 我工作得很好!太感谢了!我会尽快接受!
    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2021-11-17
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多