我刚刚进入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)