2016-11-26 2 views
-5

Angenommen, ich habe eine Liste: da draußenWie werden die gebräuchlichsten Elemente in einer Liste zurückgegeben, die in Python eng miteinander verknüpft sind?

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

Ich möchte wissen, ob es eine Funktion, die die meine am häufigsten und die damit verbundenen Figuren aus Zahlen sind:

most_common = [2.2, 2.23, 2.24] 

Von dort aus kann ich gebe das kleinste der Liste zurück oder mache was auch immer ich will.

Dies ist die Funktion i so weit bin mit, und ich bin nicht zufrieden mit den Ergebnissen

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

Vielen Dank im Voraus.

+5

Wie genau Sie "eng miteinander verbunden" definieren? Ohne eine genaue Definition gibt es keine Möglichkeit, dies zu lösen. –

+1

Sie müssten einer solchen Funktion nur sagen, was "häufigste und verwandte Zahlen" bedeutet. Was meinen Sie? Meinst du das in absoluter oder relativer Hinsicht? Wie nah ist nahe genug? –

Antwort

2

Es hängt davon ab, was Sie mit am häufigsten bedeuten. Sie können diesen Algorithmus und setzte Präzision mit eps Variable verwenden:

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

Vielen Dank. Ich hatte etwas Ähnliches im Sinn, wusste aber nicht, wo ich anfangen sollte oder ob ich es erwähnen sollte, um die Antworten nicht zu ruinieren. – Edwinner

+0

Mein anderer Ansatz war die Kern auf die Elemente in der Liste zu gehen, wandeln sie in die Saiten, finden Werte bei jedem Index und eine Scoring-Mechanismus verwenden, um meine eng verwandten Zahlen zu finden. Was denkst du darüber? – Edwinner

+0

@Edwinner, ich bin mir nicht sicher, wie es möglich ist, eine Zahl zu vergeben. Die Punktzahl einer Zahl wäre eine Zahl selbst. Die einzige Frage ist, wie nahe die Zahlen sein müssen, um Nachbarn zu sein, deshalb brauchen wir hier etwas wie 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) 

am: [2.2, 2.23, 2.24]

+0

Große Antwort! Ich werde es mit ein paar meiner Werte versuchen. – Edwinner

Verwandte Themen