使用 NumPy 查找元组列表第二个元素的中位数

2024-05-04

假设我有一个元组列表,如下所示:

list = [(a,1), (b,3), (c,5)]

我的目标是使用元组的第二个元素来获取元组列表中位数的第一个元素。在上面的情况下,我想要 b 的输出,因为中位数是 3。我尝试使用 NumPy 和以下代码,但无济于事:

import numpy as np

list = [('a',1), ('b',3), ('c',5)]
np.median(list, key=lambda x:x[1])

您可以这样计算中位数:

np.median(dict(list).values()) 
# in Python 2.7; in Python 3.x it would be `np.median(list(dict(list_of_tuples).values()))`

首先将您的列表转换为字典,然后计算其值的中位数。

当你想获得实际的密钥时,你可以这样做:

dl = dict(list) #{'a': 1, 'b': 3, 'c': 5}

dl.keys()[dl.values().index(np.median(dl.values()))]

这将打印'b'。假设中位数在列表中,如果不是ValueError会被抛出。因此,您可以使用try/except就像这样使用@Anand S Kumar 的答案中的例子:

import numpy as np

l = [('a',1), ('b',3), ('c',5), ('d',22),('e',11),('f',3)]

# l = [('a',1), ('b',3), ('c',5)]

dl = dict(l)
try:
    print(dl.keys()[dl.values().index(np.median(dl.values()))])
except ValueError:
    print('The median is not in this list. Its value is ',np.median(dl.values()))
    print('The closest key is ', dl.keys()[min(dl.values(), key=lambda x:abs(x-np.median(dl.values())))])

对于第一个列表,您将获得:

中位数不在此列表中。其值为4.0

最接近的键是 f

对于您的示例,它只打印:

b

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NumPy 查找元组列表第二个元素的中位数 的相关文章

随机推荐