【问题标题】:Sum float values at each index point in nested lists在嵌套列表中的每个索引点求和浮点值
【发布时间】:2014-04-16 12:15:13
【问题描述】:

我有一个包含 3 个字符串的列表:

["Apple", "Orange", "Pear"]

我有一个列表列表,每个列表都包含 3 个浮点值:

[[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]

我需要对嵌套列表中每个索引点的内部列表元素求和,并以以下格式输出:

[[0.5, "Apple"], [0.7, "Orange"], [0.9, "Pear"]]

我边走边学,但这超出了我目前所知道的范围。关于如何实现这一点的任何建议都会很棒。

【问题讨论】:

    标签: python list


    【解决方案1】:
    fruits, values = ["Apple", "Orange", "Pear"], [[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]
    print zip(map(sum, zip(*values)), fruits)
    # [(0.5, 'Apple'), (0.7, 'Orange'), (0.8999999999999999, 'Pear')]
    

    在上面的代码中,

    zip(*values)
    

    将values 列表中的所有对应元素放在一起。它会产生

    [(0.1, 0.4), (0.2, 0.5), (0.3, 0.6)]
    

    现在,我们可以添加它们,所以我们这样做了

    map(sum, zip(*values))
    

    查找values 列表中所有相应元素的总和。结果会是这样的

    [0.5, 0.7, 0.8999999999999999]
    

    现在,我们要做的就是将其与相应的fruits 映射,所以我们只需zip 它。就是这样:-)

    由于您使用的是 Python 3.x,其中 zip 返回的是迭代器而不是列表,因此您需要像这样获取列表

    list(zip(map(sum, zip(*values)), fruits))
    

    如果你想在没有zip 和map 的情况下这样做,你可以使用

    result = []
    for i in range(len(fruits)):
        total = 0
        for j in range(len(values)):
            total += values[j][i]
        result.append([total, fruits[i]])
    print result
    

    【讨论】:

    • 当我在 IDLE 中使用 zip 功能时,我得到:<zip object at 0x1044a33c8>
    • 这是完美的,我只需要研究一下。感谢您的帮助!
    • @Derpy 使用我在答案中包含的解释。
    • @Derpy 很高兴能帮上忙。如果你觉得我的回答对你有帮助,你可以Accept my Answer :-)
    • 当然,我只需要等待计时器这样做 =) 另外,出于好奇,是否有另一种方法可以做到这一点,也许是一种效率较低的方法?从理论上讲,我应该在不知道 map 或 zip 的情况下完成它...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2022-11-17
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多