在子列表中包含元组的列表中查找最小值
Find the smallest value in a list with tuples inside a 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:
for z in y[:3]:
fitscores2.append(z)
return min(fitscores2)
输出应该是 0.2。输出不能是0.05.
min([value for sublist in lst for value in sublist[0][:3]])
您的子列表总是只包含一个元组吗?如果是这样,
def FitScoreSearch3(fitscores):
return min(min(x[0][:3]) for x in fitscores)
如果允许子列表包含多个元组:
def FitScoreSearch3(fitscores):
return min(min(y[:3]) for x in fitscores for y in x)
在这两种情况下,这会将您的循环替换为生成器表达式。此外,不是将所有数字收集到一个大列表中然后 然后 执行 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
我需要找到列表中的最小值。该列表具有包含元组的子列表。我需要在所有这些元组中找到最小值,但它只能包含前 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([value for sublist in lst for value in sublist[0][:3]])
您的子列表总是只包含一个元组吗?如果是这样,
def FitScoreSearch3(fitscores):
return min(min(x[0][:3]) for x in fitscores)
如果允许子列表包含多个元组:
def FitScoreSearch3(fitscores):
return min(min(y[:3]) for x in fitscores for y in x)
在这两种情况下,这会将您的循环替换为生成器表达式。此外,不是将所有数字收集到一个大列表中然后 然后 执行 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