【问题标题】:Compare elements of two lists and calculate median value比较两个列表的元素并计算中值
【发布时间】:2022-11-23 19:16:04
【问题描述】:

我有一个关键字列表:

list1 = ['key(1)', 'key(2)' ........, 'key(x)']

另一个二维列表:

list2 = [['key1','str(11)','value(11)'],['key1','str(12)','value(12)'].....,['key(1)','str(1n)','value(1n)'],['key2','str(21)','value(21)'],...,['key(2)','str(2n)','value(2n)'],........., ['key(n)','str(n1)','value(n1)'],...,['key(n)','str(nn)','value(nn)']]

我想做的是计算列表 1 中包含在列表 2 的元素中的每个关键字的值的中值,输出将如下所示:

output_list=[['key(1)',median(value(11),...value(1n)], ['key(2)',median(value(21),...value(2n)],.....,['key(x)',median(value(x1),...value(xn)]]

我从一个 if 语句开始:

import statistics
for i in range(0,len(list1)):
    for j in range (0,len(list2)):
        if list1[i] in list2[j]:
            print(list1[i],statistics.median(int(list2[j][2])))

我正在尝试打印结果,但我得到的是“int”对象不可迭代

【问题讨论】:

  • 你的名单有多大?当您在列表中按顺序查找键时,使用字典而不是列表会更有效也更容易。这通常是字典的查找工作。 O(n) -> O(1)。

标签: python python-3.x list


【解决方案1】:

median 应该收到一个包含所有键值的迭代器,而你只给它一个值。

list1 = ["key(1)", "key(2)"]
list2 = [
    ["key(1)", "str(11)", "11"],
    ["key(1)", "str(12)", "12"],
    ["key(1)", "str(1n)", "19"],
    ["key(2)", "str(21)", "21"],
    ["key(2)", "str(2n)", "23"],
    ["key(2)", "str(21)", "21"],
    ["key(2)", "str(2n)", "253"],
]


import statistics

def values_for_key(searched_list, searched_key):
    for key, string, value in searched_list:
        if key == searched_key:
            yield int(value)

# other solution:
# def values_for_key(searched_list, searched_key):
#     return (int(value) for key, string, value in searched_list if key == searched_key)


for key in list1:
    print(key, statistics.median(values_for_key(list2, key)))

就像评论中所说的那样,如果您的列表很大,这不是一种有效的算法,您应该考虑另一种存储它们的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2020-07-04
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多