Python 在子列表中包含元组的列表中查找最小值

Python 在子列表中包含元组的列表中查找最小值,python,list,sublist,Python,List,Sublist,我需要在列表中找到最小的值。该列表具有包含元组的子列表。我需要在所有这些元组中找到最小的值,但它只能包含前3个值。我设法用下面的代码实现了,但我希望它看起来更干净 lst = [[(1, 2, 3, 50)], [(0.2, 0.4, 2, 0.1)], [(0.6, 0.8, 1.2, 0.05)]] def FitScoreSearch3(fitscores): fitscores2 = [] for x in fitscores: for y in x:

我需要在列表中找到最小的值。该列表具有包含元组的子列表。我需要在所有这些元组中找到最小的值,但它只能包含前3个值。我设法用下面的代码实现了,但我希望它看起来更干净

lst = [[(1, 2, 3, 50)], [(0.2, 0.4, 2, 0.1)], [(0.6, 0.8, 1.2, 0.05)]]

def FitScoreSearch3(fitscores):

  fitscores2 = []
  for x in fitscores:
      for y in x:
          for z in y[:3]:
              fitscores2.append(z)

  return min(fitscores2)

输出应为0.2。输出不能为0.05。

min([lst中的子列表的值对于子列表中的值[0][:3]])
您的子列表是否总是只包含一个元组?如果是,

def FitScoreSearch3(fitscores):
返回最小值(fitscores中x的最小值(x[0][:3]))
如果允许子列表包含多个元组:

def FitScoreSearch3(fitscores):
返回最小值(最小值(y[:3])表示x中的x中的x中的y得分)

在这两种情况下,这会将循环替换为生成器表达式。此外,与将所有数字收集到一个大列表中然后执行
min()
不同,上面的方法首先计算元组上的
min()
(或者更确切地说是元组的前3个元素),然后将全局最小值计算为所有这些“子最小值”的
min()
。由于这不会创建额外的数据结构,因此速度更快。

在此代码中,lst2包含每个元组前3个元素的所有值

lst2 = [ x for sublist in lst for tpl in sublist for x in tpl[:3] ]
print(min(lst2)) # 0.2

你可以这样做-

def fitScoreSearch3(fitScores):
    lst = list(map(lambda x: list(x[0][:3]), fitScores))
    minimum = min(list(map(min, lst)))
    return minimum