2016-11-26 21 views
-5

假设我有一个列表:如何返回列表中与Python中的值密切相关的最常见项目?

lst = [2.2, 2.23, 2.24, 3, 4, 5, 3.8] 

我想知道是否有一个函数在那里,数字,我的最常见和最相关的数字是:

most_common = [2.2, 2.23, 2.24] 

从那里我可以返回列表中最小的一个,或者做任何我想要的其他操作。

这是我使用至今的功能,我不喜欢以结果

max(set(lst), key=lst.count) 

在此先感谢。

+5

究竟如何定义 “密切相关的”?没有一个确切的定义,就没有办法解决这个问题。 –

+1

你需要告诉这样一个功能,“最常见和相关的数字”是什么意思。你什么意思?你的意思是绝对的还是相对的?距离足够近? –

回答

2

这取决于你最常见的含义。您可以使用此算法,并设置精度eps变量:

a = [2.2, 2.23, 2.24, 3, 4, 5, 3.8] 
eps = 0.5 


def find_relative(values, eps): 
    minimum, maximum = 0, 0 
    result = [] 
    temp = [] 
    for v in sorted(values): 
     if not temp: 
      minimum = maximum = v 
      temp.append(v) 
     else: 
      if abs(v - minimum) < eps and abs(v - maximum) < eps: 
       temp.append(v) 
       if v < minimum: 
        minimum = v 
       elif v > maximum: 
        maximum = v 
      else: 
       if len(temp) > 1: 
        result.append(temp) 
       minimum = maximum = v 
       temp = [v] 
    return result 


print(find_relative(a, eps)) # [[2.2, 2.23, 2.24], [3.8, 4]] 
+0

非常感谢。我有类似的想法,但不知道从哪里开始,或者我应该提及它,以免我毁了答案。 – Edwinner

+0

我的另一种方法是对列表中的项目进行核查,将它们转换为字符串,在每个索引中查找值并使用一些评分机制来查找与我密切相关的数字。你对此有何评论? – Edwinner

+0

@Edwinner,我不确定如何给一个数字分数。一个数字的分数本身就是一个数字。唯一的问题是这些数字离邻居有多近,这就是为什么我们需要在这里有像epsilon这样的东西。 – pythad

1
a = [2.2, 2.23, 2.24, 3, 4, 5, 3.8] 
a_round = [] 
a_1 = [] 

for item in a: 
    a_round.append(round(item,1)) 

for ir in range(0, len(a_round)): 
    if a_round.count(a_round[ir]) > 1: 
     a_1.append(a[ir]) 

print(a_1) 

答:2.2,2.23,2.24

+0

很好的答案!我会用我的一些价值尝试它。 – Edwinner