在元组列表中搜索最小值

时间:2015-10-20 13:33:40

标签: python list tuples

我有一个包含元组的列表,在每个元组中都有一个列表和一个整数值 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。 现在,内置函数min()并没有真正做到这一点..它根据Mylist [i] [0]

的实际列表进行比较

只有当列表包含两个项目时,我才能执行此操作: 但我还没想出如何在...列出10个项目!

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

5 个答案:

答案 0 :(得分: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])

您可以使用key提供minlambda功能。

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

答案 1 :(得分: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])

答案 2 :(得分: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

答案 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函数提供密钥的单行程当然在实际意义上更有用,但我认为我会将其分享用于教育目的。

答案 4 :(得分:-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))