【问题标题】:How to divide two elements in a list of objects?如何划分对象列表中的两个元素?
【发布时间】:2020-11-08 06:25:48
【问题描述】:

我有一个对象列表(列表列表),其中包含一个字符串和两个浮点值。我必须使用 lambda 函数来划分两个浮点值。 这是我的示例数据:

listOfObjects = [['I', 5, 9], ['Y', 7, 13],['O', 3, 32]]

我的输出应该是相同的对象列表,多一列的值为 9/5、13/7 和 32/3

listOfObjects = [['I', 5, 9, 1.8], ['Y', 7, 13, 1.85],['O', 3, 32, 10.66]]

这是我尝试过的:

avgValueList = list(map(lambda x, y: y[2]/x[1],listOfObjects))

但这给了我一个错误: TypeError: <lambda>() missing 1 required positional argument: 'y'

【问题讨论】:

  • 什么是listOfObjects?将定义添加到问题中。
  • 嗨@DYZ,感谢您的评论。 listOfObjects 包含一个字符串和两个浮点值。前三个打印语句是我的数据示例。
  • 请在问题中添加示例listOfObjects。您的代码示例必须是可重现的。
  • 好的,我已经更改了我的问题以使代码可重现

标签: python-3.x list object lambda divide


【解决方案1】:
avgValueList = list(map(lambda x: x.append(x[2]/x[1]), listOfObjects))

listOfObjects 的每个元素都是包含一个字符串和两个浮点数的列表。当您映射 listOfObjects 时,这些列表中的每一个都将成为 lambda 的参数 x。这意味着x[0] 是字符串,x[1] 是第一个浮点数,x[2] 是最后一个浮点数。所以lambda x: x[2]/x[1] 获取一个包含 3 个元素的列表,并将最后一个元素除以中间元素。你不需要额外的参数给你 lambda。由于您想要追加到现有列表,我们应该将x.append 添加到 lambda,如下所示:lambda x: x.append(x[2]/x[1])。现在 lambda 将获取一个包含三个元素的列表,计算最后两个元素之间的除法,并将结果附加到列表的末尾,然后再返回。

【讨论】:

    【解决方案2】:

    我的解决方案使用pandas Python 模块。

    import pandas as pd
    
    lst = [
        ['I', 5, 9],
        ['Y', 7, 13],
        ['O', 3, 32],
    ]
    
    df = pd.DataFrame(lst)
    df['result'] = list(map(lambda x: x[2]/x[1], lst))
    print(df)
    

    您可以通过键入“df.result”或df['result'] 来访问result 列。

    【讨论】:

    • 谢谢,但我不能使用其他库。
    • 这里绝对不需要熊猫。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2017-04-25
    • 2016-10-31
    • 2020-03-27
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多