代码之家  ›  专栏  ›  技术社区  ›  Matt

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

  •  1
  • Matt  · 技术社区  · 6 年前

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

    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 回复  |  直到 6 年前
        1
  •  4
  •   jpp    6 年前

    你可以用 map 具有 min + 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
    
        2
  •  0
  •   T Burgis    6 年前

    使用numpy的min函数

    import numpy as np
    list2 = np.min(list1,axis=0)
    
        3
  •  0
  •   franiis Lukas Owen    6 年前

    我发布了更通用的解决方案 for 循环。另一个答案在production env中更好,但对某些人来说可能更有教育意义:

    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)
    
        4
  •  -2
  •   N Chauhan    6 年前

    编辑(整理我的困惑之后);

    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)