如何合并两个列表并获取每个索引具有最高值的列表的名称?

问题描述 投票:0回答:2

我正在尝试比较两家博彩公司的两个赔率列表。它们看起来像这样:

List1 = ['2.66', '3.79', '1.88', '1.61', '2.51', '1.29', '2.29', '2.56', '3.16', '2.05', '2.95', '2.64', '2.26', '3.17', '2.64', '2.25']
List2 = ['2.70', '4.40', '1.87', '1.56', '2.50', '1.26', '2.33', '2.60', '3.20', '2.04', '3.00', '2.65', '2.25', '3.20', '2.65', '2.22']

我需要合并它们并获得最高的赔率。我已经用 numpy 做到了这一点:

numpy.array([List1, List2]).astype(float).max(axis = 0)
FinalList = [2.7 4.4 1.88 1.61 2.51 1.29 2.33 2.6 3.2 2.05 3.2 2.65 2.26 3.2 2.65 2.25]

问题是我不知道每个索引属于哪个列表。在这个例子中我需要得到的是:

NamesLists = [List2, List2, List1, List1, List1, List1, List2, List2, List2, List1, List2, List2, List1,  List2, List2, List1]

但我真的不知道该怎么做。

python list numpy
2个回答
1
投票

您可以组合

argmax
take_along_axis
:

import numpy

List1 = ['2.66', '3.79', '1.88', '1.61', '2.51', '1.29', '2.29', '2.56', '3.16', '2.05', '2.95', '2.64', '2.26', '3.17', '2.64', '2.25']
List2 = ['2.70', '4.40', '1.87', '1.56', '2.50', '1.26', '2.33', '2.60', '3.20', '2.04', '3.00', '2.65', '2.25', '3.20', '2.65', '2.22']

tmp = numpy.array([List1, List2]).astype(float)
idx = tmp.argmax(axis=0)

FinalList = np.take_along_axis(tmp, idx[None], axis=0)[0]
# array([2.7 , 4.4 , 1.88, 1.61, 2.51, 1.29, 2.33, 2.6 , 3.2 , 2.05, 3.  ,
#        2.65, 2.26, 3.2 , 2.65, 2.25])

NamesLists = np.array(['List1', 'List2'])[idx]
# array(['List2', 'List2', 'List1', 'List1', 'List1', 'List1', 'List2',
#        'List2', 'List2', 'List1', 'List2', 'List2', 'List1', 'List2',
#        'List2', 'List1'], dtype='<U5')

0
投票

一般来说,你可以使用argmax函数:

numpy.array([List1, List2]).argmax(axis = 0)

这将返回:

array([1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0])

这将为您提供具有较高值的列表的索引。

© www.soinside.com 2019 - 2024. All rights reserved.