Skip to main content
 首页 » 编程设计

python之在 Python 中从选定的列表元素中查找最大的数字

2025年05月04日11over140

我正在使用 Python 3.2.3,并且想从列表中的特定元素中找到最大的数字。同样重要的是,我要保留一些关于哪个元素是最大数的知识,但对于这是如何发生的我非常灵活。让我解释一下...

背景

我有以下列表:

the_list = ['Order', '1', '5', 'Order', '2', '18', 'Order', '3', '45', 'Order', '4', '2', 'Order', '5', '8', 'Order', '6', '2', 'Order', '7', '1', 'Order', '8', '1', 'Order', '9', '1'] 

在每三个列表元素中,前两个是对数据的描述——即“订单 1”、“订单 2”、“订单 3”为“订单”、“1”、...“订单” ', '2', ... '订单', '3', ... 一直到“订单 9”。这些不会改变,并提供每三个列表元素的来源或名称。

每三个列表元素中的第三个是相关信息。在这个例子中,数字是 5...18...45...2...等等。我想从这个每三个元素中找到最大的数字。在这种情况下,最大的数字是 45。这些数字一直在变化;它们可以是 0 到 100 [含] 之间的任何整数。

到目前为止我尝试了什么

我尝试过以两种方式使用 Python 的 max() 函数。首先,简单...

max(the_list) 

... 提供“订单”作为最大值。我的目标很糟糕。

所以我决定尝试制作一个新列表,仅由原始列表的每三个元素组成。像这样...

foo = (the_line[2], the_line[5], the_line[8], the_line[11], the_line[14], the_best_line[17], the_best_line[20], the_best_line[23], the_best_line[26]) 
 
max(foo) 

... 提供“8”作为最大数,第 15 个列表元素和第 5 个第三列表元素。这是一个数字,但不是最大值 45 [在此示例中]。

我也曾涉足制作一系列 if-else 语句,但都没有成功,并且认为必须有更 pythonic//elegant 的方式。我承认我可能在这条路线上退出得太早,和//或我的心态不对。

请您参考如下方法:

像这样的东西应该可以工作:

>>> the_list = ['Order', '1', '5', 'Order', '2', '18', 'Order', '3', '45', 'Order', '4', '2', 'Order', '5', '8', 'Order', '6', '2', 'Order', '7', '1', 'Order', '8', '1', 'Order', '9', '1'] 
>>> the_list[::3] 
['Order', 'Order', 'Order', 'Order', 'Order', 'Order', 'Order', 'Order', 'Order'] 
>>> the_list[2::3] 
['5', '18', '45', '2', '8', '2', '1', '1', '1'] 
>>> max(int(num) for num in the_list[2::3]) 
45 

我在哪里使用了 Python 的 slice notation使用 the_list[2::3] 获取从元素 #2(即 2)开始的每三个(即 3)元素.

但这本身还不够,因为 the_list 的条目是字符串,并且它们是按字典顺序排序的,而不是按数字排序的。这就是为什么我必须在每个术语上调用 int(num) 并将 max 传递给 generator expression ,这里的形式是“(someseq 中的 elem 的东西)”。

您还说跟踪哪个元素最大很重要,我假设您的意思是您需要索引。给定最大值很容易找到哪些元素具有它(在一般情况下它可能不是唯一的,毕竟)使用另一个搜索匹配它的元素可能是最简单的。或者,您可以将索引本身编码到 max 调用中:

>>> max((int(num), i) for i, num in enumerate(the_list[2::3])) 
(45, 2) 

它给出最大值和三组索引,并且有效,因为元组按第一个元素排序,然后是第二个元素,依此类推。这种方法也不能处理非唯一的最大值。

但老实说,我可能会像@astynax 那样从 reshape 数据开始——感觉这个列表不应该是扁平的。