迭代地在子列表中找到最小值

时间:2013-09-29 23:14:00

标签: python performance numpy

我需要在新列表中查找并存储主列表的每个子列表中的最小值。这就是我到目前为止所做的:

# Main list.
list_a = [[0.2,0.4,0.6,1.1], [1.2,0.1,0.7,0.9], [0.3,0.5,0.9,0.7], [0.5,0.2,0.6,0.3]]

# List that stores all the minimum values.
list_b = []

# Iterate through all sub-lists in main list.
for sub_list in list_a:
    # Identify minimum value in sub-list.
    min_val = np.argmin(sub_list)
    # Store this minimum value in list_b.
    list_b.append(sub_list[min_val])

这样,list_b将如下所示:

print list_b
[0.2, 0.1, 0.3, 0.2]

有更高效/ pythonic的方法吗?


答案

我检查了 1_CR Haidro DSM 给出的答案。与我对此问题的初步提案相比,根据time.time()

,他们排名如下
  • 0.00774312019348,我的代码
  • 0.0201649665833,1_CR
  • 0.0234789848328,Haidro
  • 0.0014910697937,DSM

与我最初的方法相比,DSM是最快的解决方案,大约是5倍,其他两个大约需要28倍。所有这些都是很好的解决方案,但由于性能的原因,我将DSM标记为可接受的答案。谢谢大家!

3 个答案:

答案 0 :(得分:3)

只需使用列表推导和min函数

[min(x) for x in list_a]

答案 1 :(得分:3)

由于标记为numpy,如果您的list_a具有矩形形状,则可以使用numpy函数。

例如:

>>> np.min(list_a, axis=1)
array([ 0.2,  0.1,  0.3,  0.2])

或者,为避免重复转化,请将其设为array

>>> b = np.array(list_a)
>>> b.min(axis=1)
array([ 0.2,  0.1,  0.3,  0.2])

答案 2 :(得分:2)

也许使用map()min()

list_b = map(min, list_a)
相关问题