嵌套元组的最大值[重复]
Posted
技术标签:
【中文标题】嵌套元组的最大值[重复]【英文标题】:Maximum of nested tuple [duplicate] 【发布时间】:2018-07-24 04:17:26 【问题描述】:所以我无法打印出最大数量的嵌套元组。让我在这里稍微回溯一下。所以我对如何分别打印出元素、如何将分离的元素分配到新元组以及如何打印出最大数量的常规元组有了一个非常好的想法。好吧,不久前我遇到了一个挑战,希望我编写一个程序来打印出最大数量的 nested 元组。起初,我认为这可能很容易,但我一直打印出相同的变量。让我向您展示我目前所拥有的。
my_nested_tuple = ((2,12), (24, 7), (9, 18), (22, 13))
def highest_element(l):
my_max = l[0]
for num in l:
if my_max < num:
my_max = num
return my_max
print highest_element (my_nested_tuple)
这是我得到的。程序不断打印出 (24,7),但我希望它只打印出最高元素(即 24)。
任何帮助或提示将不胜感激。谢谢!
编辑:请记住,我正在学习计算机科学入门的数据结构课程,并且没有比这更进一步。
【问题讨论】:
元组是任意嵌套的,还是仅使用您在此处描述的结构嵌套。换句话说,这些输入是否有效:((2,12,24),(1,2))
、((2, (12, 24)), (1,2))
、(2, (1,2))
?
您的算法无法正常工作。尝试my_nested_tuple = ((2,12), (24, 7), (9, 18), (1, 600))
,它仍然选择(24,7)
,因为您的代码比较的是元组,而不是整数。见:***.com/q/5292303/3901060
不确定是否重复:您建议结合两个问题来回答这个问题。此外,它甚至不是解决问题的唯一方法(尽管是最通用的)。
【参考方案1】:
您可以计算每个元组内最大值中的最大值。
这是一个简短的解决方案:
max(map(max, my_nested_tuple))
相当于:
max(max(el) for el in my_nested_tuple)
【讨论】:
【参考方案2】:转换为一个元组,然后使用max
max(sum(my_nested_tuple,()))
Out[720]: 24
通知:
well, I don't have an online reference handy, but it is quadratic time, since + between sequences is linear. Indeed, the sum function itself prevents you if you try to use strings, e.g. see what happens if you try TypeError: sum() can't sum strings [use ''.join(seq) instead] Finally, from the docstring: "This function is intended specifically for use with numeric values and may reject non-numeric types."
【讨论】:
this:sum(my_nested_tuple,())
是一种反模式。避免它。
@juanpa.arrivillaga - 我不怀疑你,但你有该声明的在线参考吗?
@Robᵩ 好吧,我没有方便的在线参考,但它是二次时间,因为序列之间的+
是线性的。事实上,如果您尝试使用字符串,sum
函数本身会阻止您,例如看看如果你尝试TypeError: sum() can't sum strings [use ''.join(seq) instead]
会发生什么最后,从文档字符串中:“这个函数专门用于数值,可能会拒绝非数值类型。”【参考方案3】:
这是一种方法,在惰性生成器上计算单个 max
。
from itertools import chain
my_nested_tuple = ((2,12), (24, 7), (9, 18), (22, 13))
max(chain.from_iterable(my_nested_tuple))
# 24
【讨论】:
【参考方案4】:from itertools import chain
max(chain(*my_nested_tuple))
它首先展平元组,然后计算最大值。
【讨论】:
【参考方案5】:你可以排序,先按每个元组的第一个元素,然后按第二个元素,最后比较两者中最大的一个:
by_first = sorted(my_nested_tuple)
by_second = sorted(my_nested_tuple, key=lambda tup: tup[1])
print(max(by_first[-1][0], by_second[-1][1]))
或者像这样直接使用 max() 函数:
by_first = max(my_nested_tuple)[0]
by_second = max(my_nested_tuple, key=lambda tup: tup[1])[1]
print(max(by_first, by_second))
【讨论】:
你为什么一直在元组上调用list
?
它确实有效,但我对 Python 编码还不是很了解。
@juanpa.arrivillaga,你是对的,不需要 list()。我最初想到了列表方法 .sort() 并且必须先将元组转换为列表。现在我修好了。以上是关于嵌套元组的最大值[重复]的主要内容,如果未能解决你的问题,请参考以下文章