通过索引创建嵌套列表的最小值的列表

时间:2018-08-09 09:56:15

标签: python list min nested-lists

我有一系列长度相同的嵌套列表(列表的数量各不相同):

list1=[[5.5,4,6.21,3.4,8.1,3.8],[3.8,2.1,5.1,4,12.3,2.4],[4,2.11,8.2,3.6,4.5,2]]

我正在尝试创建每个列表的每个索引中编号最小的列表,即

list2=[3.8,2.1,5.1,3.4,4.5,2]

除了答案是列表理解还是for循环外,真的不确定从哪里开始。

4 个答案:

答案 0 :(得分:4)

您可以将mapmin + zip结合使用:

res = list(map(min, zip(*list1)))

或者,使用列表理解:

res = [min(i) for i in zip(*L)]

对于较大的列表,这些方法的性能可比:

L = list1*100000

%timeit list(map(min, zip(*L)))    # 110 ms per loop
%timeit [min(i) for i in zip(*L)]  # 123 ms per loop

答案 1 :(得分:0)

使用numpy的min函数

import numpy as np
list2 = np.min(list1,axis=0)

答案 2 :(得分:0)

我发布了使用for循环的更通用的解决方案。另一个答案在生产环境中更好,但是对某些人可能更具教育意义:

list=[[2,3,4,5],[3,4,5,1],[4,5,1,6]]
result = list[0]
for i in range(1, len(list)):
  for j in range(0, len(list[1])):
    if list[i][j] < result[j]:
      result[j] = list[i][j]

print(result)

答案 3 :(得分:-2)

编辑(解决了我的困惑之后);

list2 = []
for i in range(len(list1[0])):
    list2.append(min([list1[j][i] for j in range(len(list1))]))

尝试:

list2 = [min(i) for i in list1]

其中min(i)返回i中的最小值,在这种情况下为列表。 用for loop术语:

list2 = []
for sublist in list1:
    list2.append(min(sublist))

您甚至可以使用min()函数的实现来单独计算最小值,但是从那里开始,我将使用它。

list2 = []
for sub in list1:
    lowest = sub[0]
    for item in sub:
        if item < lowest:
            lowest = item
    list2.append(lowest)