此代码应迭代列表列表并返回包含最小值的整个列表。我已经确定它一直在索引[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?)
答案 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,并与之进行比较。