在列表列表中查找最小值并返回该列表

时间:2018-03-22 17:20:00

标签: python

此代码应迭代列表列表并返回包含最小值的整个列表。我已经确定它一直在索引[0]返回列表,但我无法弄清楚原因。任何帮助,甚至提示,将不胜感激。

def list_with_min(list_of_lists):

    m = 0

    for i in range(len(list_of_lists)-1):
        list_i = list_of_lists[m]
        min_list = min(list_of_lists[m])

        if min_list < list_i[0]:
            m = i

    answer = list_of_lists[m]
    return answer


print(list_with_min([[9, 10, 15], [1, 8, 4], [-3, 7, 8]]))
# [9, 10, 15]--------> should be [-3, 7, 8]

print(list_with_min([[5], [9], [6], [2], [7], [10], [72]]))
# [5]----------------> should be [2]

print(list_with_min([[-2, 6, 9], [-9, 6, 9], [4, 8, 2], [5, -2]]))
# [-2, 6, 9]---------> should be [[-2, 6, 9], [5, -2]] (I assume two lists with the same minimum value should both be returned?)

5 个答案:

答案 0 :(得分:1)

您可以为函数min提供一个键,这是一个用于比较的函数。事实证明,在这里你希望key成为函数min本身。

list_of_lists = [[9, 10, 15], [1, 8, 4], [-3, 7, 8]]

min(list_of_lists, key=min) # [-3, 7, 8]

这不会返回多个最小值,但可以进行改进。

list_of_lists = [[9, 10, 15], [1, -3, 4], [-3, 7, 8]]

min_value = min(map(min, list_of_lists))

[lst for lst in list_of_lists if min(lst) == min_value] # [[1, -3, 4], [-3, 7, 8]]

答案 1 :(得分:0)

  

编辑:更多的蟒蛇方式可能是这样的:

def list_with_min(l):
  min_vals = [min(x) for x in l]
  return l[min_vals.index(min(min_vals))]

有点笨重但有效......

l=[[9, 10, 15], [1, 8, 4], [-3, 7, 8]]

def list_with_min(l):   
    m = min(l[0])   
    for i in l[1:]:
        m = min(i) if min(i) < m else m   
    for i in l:
        if m in i:
        return i

print(list_with_min(l))

输出:

[-3, 7, 8]

答案 2 :(得分:0)

你可以在一行中使用列表理解(为了帮助你完成逻辑而增加了三个),但它以不同的方式处理重复:

#for each list return a list with the minimum and the list
mins_and_lists = [[min(_list), _list] for _list in lists]
#find the minimum one
min_and_list = min([[min(_list), _list] for _list in lists])
#parse the result of the minimum one list
minimum, min_list = min([[min(_list), _list] for _list in lists])

如果你想通过返回两者来处理重复的最小值:

dup_mins = [_list for _min, _list in mins_and_lists if _min == minimum]

答案 3 :(得分:0)

你也可以使用它:

min([ (min(a),a) for a in list_of_lists ])[1]

答案 4 :(得分:-1)

你的病情没有意义。你正在检查

if min_list < list_i[0]:

表示,如果list_i的最小值小于list_i的第一个值。

我不认为您只想与list_i [0]进行比较。您需要跨循环存储min_list,并与之进行比较。