【问题标题】:Assign Score and weight to line segment将分数和权重分配给线段
【发布时间】:2019-06-14 10:04:38
【问题描述】:

我需要检查来自不同表的一系列属性。总共有大约 40 项,例如

origin, age, amount, etc

我还没有真正想出收集数据的最佳方法,也许从不同来源提取数据并创建一个字典

我为每个测试创建了一个函数。

def age(value):
    if value < 3:
        Score = 1
    elif 3 <= value < 5:
        Score = 7
    elif value >= 5:
        Score = 10
    else:
        Score = 10
    Weight = 5
    return (Score, Weight)

def origin(value):
    if value.upper() == "USA":
        Score = 1
    elif value.upper() == "JAPAN":
        Score = 1
    elif value.upper() == "CHINA":
        Score = 10
    elif value.upper() == "OTHER":
        Score = 7
    else:
        Score = 10
    Weight = 1
    return (Score, Weight)

我取值并附加到一个列表中

[[(7, 1)], [(1, 1)]]...

然后

## calling all 40 functions doesnt seem efficient
lst.append([age(4)])
lst.append([origin("JAPAN")])


score = [item[0][0] for item in lst]
weight = [item[0][1] for item in lst]
scoresum = (listsum(score))
weightsum = (listsum(weight))

total = scoresum/weightsum

有人知道更好的方法吗?我不知道,但似乎必须有更好的方法

【问题讨论】:

    标签: python


    【解决方案1】:

    如果你坚持对元组求和,你可以使用这个技巧来简化这个操作(取自this answer):

    # Option 1
    [sum(x) for x in zip(*lst)]
    
    # Option 2
    map(sum, zip(*l))
    

    这将产生一个总和列表(例如[25, 32]),然后您可以使用它来计算总数。

    但是,您将需要一个平面的元组列表,因此您可能想要进行更改。该列表应如下所示:

    [(2, 1), (1, 1), ...]
    

    【讨论】:

    • 谢谢,我正在考虑使用 zip 作为列表
    猜你喜欢
    • 1970-01-01
    • 2018-12-18
    • 2015-12-26
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多