我有这个清单:
dCF3v=[[(1.90689635276794, -44704.76171875)],
[(1.90689635276794, -44705.76171875)],
[(1.90689635276794, -44706.76171875)],
[(1.90689635276794, -44707.76171875)]
]
我想知道最大值所在行的索引。在上面的示例中:行索引3。
我已经找到了找到最大值的代码:
CF3a = (abs(x[0][1]) for x in dCF3v)
CF3 = max(CF3a)
如果可能,我想调整此代码,而不必执行经典for and if loops
。
答案 0 :(得分:2)
您可以使用enumerate
来保留索引和key
max
参数以查找正确的值:
dCF3v=[[(1.90689635276794, -44704.76171875)],
[(1.90689635276794, -44705.76171875)],
[(1.90689635276794, -44706.76171875)],
[(1.90689635276794, -44707.76171875)]
]
CF3a = (abs(x[0][1]) for x in dCF3v)
index, value = max(enumerate(CF3a), key=lambda (index, value): value)
print index,value
答案 1 :(得分:1)
由于您的数据本质上是数字的,我强烈建议您使用numpy模块,因为它的设计部分是为了满足您的要求。
您可以将数据转换为numpy数组
import numpy as np
data = np.array(dCF3v)
然后使用np.argmax
查找最大值的索引
idx = np.argmax(data)
这为您提供了展平数组的索引。如果您知道数组的形状,则可以使用模运算将此展平索引轻松转换为行数。您可以像这样获得行数和列数
rows,cols = data.shape
然后是带有模块划分的行号
maxRow = idx%cols
numpy还有一个名为unravel_index
的函数,它可以为你完成模运算,
row, col = np.unravel_index(idx, data.shape)