2015-10-20 20 views
5

Ich habe eine Liste, die ein Tupel enthalten, in jedem Tupel gibt es eine Liste und einen Interger-Wert z.Suche Min Wert innerhalb einer Liste von Tupeln

Mylist = [([1,1,3], 3),([1,1,3], 30),([2,2,3], 15),([1,3,3], 2)] 

Ich mag diese Liste dieses Tupel zurück ([1,3,3], 2) seit Mylist [i] [1] = 2, dass die min in der Liste ist. Nun, die eingebaute Funktion min() tut das nicht wirklich .. es vergleicht es auf der Grundlage der tatsächlichen Liste, die Mylist ist [0]

Ich kann dies nur tun, wenn die Liste enthält zwei Elemente: Aber ich habe nicht herausgefunden, wie es in einer Liste von .. sagen 10 Elemente zu tun!

def min(a,x,b,y): 
    t = a 
    if x >= y: 
     t = b 
    return t 

Antwort

6
Mylist = [([1,1,3], 3),([1,1,3], 30),([2,2,3], 15),([1,3,3], 2)] 
print min(Mylist,key=lambda x:x[1]) 

Sie können eine key-min Funktion lambda Verwendung bereitzustellen.

Ausgang: ([1, 3, 3], 2)

2

Wenn Sie Ihre Liste speichern mit dem Wert zuerst, dann können Sie nur min und sorted direkt verwenden:

Mylist = [(3, [1,1,3]), (30, [1,1,3]), (15, [2,2,3]),(2, [1,3,3])] 
min(Mylist) 

Ausgang: (2, [1, 3, 3])

0

nur um ihrer selbst willen Interesse, hier ist ein funktioneller Ansatz:

def get_min_tuple(l): 
    def get_index(lst, num, index=0): 
     if num in lst[index]: 
      return index 
     else: 
      return get_index(lst, num, index + 1) 
    def find_min(l, smallest=None, assigned=False): 
     if l == []: 
      return smallest 
     else: 
      if not assigned: 
       smallest = l[0][1] 
       assigned = True 
      else: 
       if l[0][1] < smallest: 
        smallest = l[0][1] 
      return find_min(l[1:], smallest, assigned) 
    return l[get_index(l, find_min(l))] 

Während der One-Liner der Bereitstellung eines Schlüssels für die Min-Funktion ist natürlich in praktischer Hinsicht sinnvoller, dachte ich, ich würde dies für Bildungszwecke teilen.

1

meine Lösung

myList = [([1, 1, 3], 3), ([1, 1, 3], 30), ([2, 2, 3], 15), ([1, 3, 3], 2)] 
minValue = [i for i in myList if i[1] == min([x[1] for x in myList])] 

Rückkehr eine Liste der Elemente mit dem Minimalwert

[([1, 3, 3], 2)] 

zum Beispiel, wenn Sie eine Liste wie

haben
myList = [([1, 1, 3], 3), ([1, 1, 3], 30), ([2, 2, 3], 15), ([1, 3, 3], 2), ([1, 1, 3], 2)] 

Ergebnis sein

[([1, 3, 3], 2),([1, 1, 3], 2)] 

Ich weiß nicht, ob Sie diese benötigen aber funktioniert: D

-1

Zeitkomplexität = n

Mylist = [([1,1,3], 3),([1,1,3], 30),([2,2,3], 15),([1,3,3], 2)] 
minv=MyList[0][1] 
minv1=MyList[0][0] 
for lst in MyList: 
    if(lst[1]<minv): 
     minv=lst[1] 
     minv1=lst[0] 
print(tuple(minv1,minv)) 
+0

Jetzt ....... besser? @ Barry Hurley – Karthik

Verwandte Themen