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

Mil*_*sen 1 python compare numbers list

我正在使用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']
Run Code Online (Sandbox Code Playgroud)

在每三个列表元素中,前两个是数据的描述 - 即"订单1","订单2","订单3"作为"订单","1",......"订单", 2',...'订单','3',...一直到"订单9".这些不会更改,并提供每个第三个列表元素的来源或名称.

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

我迄今为止所做的一切

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

max(the_list)
Run Code Online (Sandbox Code Playgroud)

...提供"订单"作为最大值.对我的目标一点糟糕.

所以我决定尝试制作一个新列表,仅列出原始列表中的每个第三个元素.像这样......

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)
Run Code Online (Sandbox Code Playgroud)

...提供"8"作为最大数字,第15个列表元素和第5个第三个列表元素.这是一个数字,但不是45 [在这个例子中]的最高数字.

我还涉及制作一系列if-else语句,但两者都不成功,并且在思维定势中必须有一个更加pythonic //优雅的方式.我承认我可能在这条路线上过早退出,而且//或者我的思维方式错误.

DSM*_*DSM 7

这样的事情应该有效:

>>> 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
Run Code Online (Sandbox Code Playgroud)

我使用Python的切片表示法3从元素#2开始获取每个第三个(那是)元素2,使用the_list[2::3].

但是,这本身并不够,因为条目the_list是条目,它们按字典顺序排序,而不是数字排序.这就是为什么我不得不调用int(num)每个术语并传递max一个生成器表达式,这里的形式为'(someseq中的elem).

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

>>> max((int(num), i) for i, num in enumerate(the_list[2::3]))
(45, 2)
Run Code Online (Sandbox Code Playgroud)

它给出了max和group of of three索引,并且因为元组按第一个元素排序,然后是第二个元素等,所以这种方法也是有效的.这种方法也不能处理非唯一的最大值.

但说实话,我可能首先要重塑像@astynax这样的数据 - 它不觉得这个列表应该是平的.


Ale*_*gov 5

>>> 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']
>>> items = zip(*[iter(the_list)] * 3)
>>> items
[('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')]    
>>> max(items, key=lambda x: int(x[2]))
('Order', '3', '45')
Run Code Online (Sandbox Code Playgroud)