2015-10-20 61 views
5

我有一个包含元组的列表,每个元组中有一个列表和一个整数值 E.g.在元组列表中搜索最小值

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

我想此列表来返回这个元组([1,3,3],2) 因为MYLIST [I] [1] = 2即最小在列表中。 现在,内置函数min()并没有真正做到这一点..它根据Mylist [i] [0]

的实际列表进行比较,我只能在列表包含两个项目: 但我还没有想过如何在..列表中说10个项目!

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

回答

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]) 

可以提供使用lambda一个keymin功能。

输出:([1, 3, 3], 2)

2

如果您存储您的清单,价值第一,那么你可以只使用minsorted直接:

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

输出:(2, [1, 3, 3])

0

只为兴趣的缘故,这里的功能方法:

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))] 

尽管为min函数提供密钥的一行内容当然在实际意义上更有用,但我认为我会分享此教育目的。

1

我的解决方案

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])] 

回报与最小值

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

例如,如果你有一个项目列表一样

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

结果列表将

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

我不知道你是否需要这一点,但工作原理:d

-1

时间复杂度= 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

现在.......更好? @BarryHurley – Karthik