1

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

# 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_CRHaidroDSM给出的答案。与我对这个问题的最初建议相比,他们的排名如下time.time()

  • 0.00774312019348,我的代码
  • 0.0201649665833, 1_CR
  • 0.0234789848328, 海德罗
  • 0.0014910697937, 帝斯曼

与我原来的方法相比,DSM 是最快的解决方案,速度快了约 5 倍,而其他两个解决方案的时间要长约 28 倍。所有都是很好的解决方案,但由于性能,我将 DSM 标记为可接受的答案。谢谢你们!

4

3 回答 3

3

由于这是 tagged 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])
于 2013-09-29T23:21:02.953 回答
3

只需使用列表理解和min功能

[min(x) for x in list_a]
于 2013-09-29T23:16:19.197 回答
2

也许使用map()and min()

list_b = map(min, list_a)
于 2013-09-29T23:16:14.867 回答