从元组列表中获取每个元组的最大值列表



我刚刚进入Python,在理解控制流和迭代逻辑时遇到了一些麻烦。

我正在尝试创建一个接受元组列表的函数,并且我想返回一个新列表,其中包含每个元组的最大元素。

我知道我错过了将最大元素放入新列表,但首先我试图获得该最大值。

def max_element_per_tuple(tuple_list):
maximum = tuple_list[0]
for item in tuple_list:
if item > maximum:
maximum = item
return maximum
# test it
tuple_list = [(-1,0,1), (10,20,30), (100,50,25), (55,75,65)]
print(max_element_per_tuple(tuple_list))

这将返回:(100, 50, 25)

想要返回:(1, 30, 100, 75)

或者,如果列表(?(,则:[1, 30, 100, 75]

简单地说,试试这个单线性的pythonic解决方案

>>> tuple_list = [(-1,0,1), (10,20,30), (100,50,25), (55,75,65)]
>>> [max(e) for e in tuple_list]       # List
[1, 30, 100, 75]
>>> tuple(max(e) for e in tuple_list)  # Tuple
(1, 30, 100, 75)

现在你只是循环遍历元组并返回"最大"元组 - 元组比较是按元素完成的。

你想要的是添加另一个循环级别,该级别将找到每个元组的最大值:

def max_element_per_tuple(tuple_list):
res = []
for tup in tuple_list:      # loops over the tuples in the list
maximum = tup[0]
for item in tup:        # loops over each item of the tuple
if item > maximum:
maximum = item
res.append(maximum)
return res

这给出了预期:

>>> max_element_per_tuple([(-1, 0, 1), (10, 20, 30), (100, 50, 25), (55, 75, 65)])
[1, 30, 100, 75]

你的函数max_element_per_tuple是正确的(尽管没有必要,因为标准函数max()存在(。你做错了使用元组列表作为参数调用该函数。这找到了列表中最大的元组(元组的"最大"意味着"第一个元素最大的元组"(,恰好是第三个元组 -(100,50,25)。您需要做的是:

result = list(map(max, tuple_list))

result = [max(t) for t in tuple_list]

最后一个大致相当于:

result = []
for t in tuple_list:
result.append(max(t))

如果将max替换为max_element_per_tuple则结果应相同。

这应该有效

def max_element_per_tuple(tuple_list):
maximum = []
for item in tuple_list:
maximum.append(max(item))

return maximum

将给出此输出:[1, 30, 100, 75]

问题:max_element_per_tuple(tuple_list( 返回错误的结果,因为它正在查找最大元组,而不是每个元组中的最大值。

def max_element_per_tuple(tuple_list):
maximum = tuple_list[0]  # maximum is = (-1,0,1)
for item in tuple_list:
if item > maximum:  # compares the tuples e.g (-1,0,1) == (10,20,30)
maximum = item
return maximum  # at the end you have (100,50,25). it's the max tuple

请尝试以下任一选项:

tuple_list = [(-1,0,1), (10,20,30), (100,50,25), (55,75,65)]
# Get the max from each tuple using List comprehension
max_items_list  = [max(tuple_item) for tuple_item in tuple_list]   # in a list
max_items_tuple = tuple(max(tuple_item) for tuple_item in tuple_list)   # in a tuple
print(max_items_list)
print(max_items_tuple)
# Get the max from each tuple using For Loop
# Can be used with List only, tuples are immutable
for_max_items_list = list()
for tuple_item in tuple_list:
max_value = max(tuple_item)  # get the max of each tuple e.g Max((-1,0,1)) = 1
for_max_items_list.append(max_value)  # add the max to list
print(for_max_items_list)

最新更新