【问题标题】:find the min and max values of nested list by index of element in nested list通过嵌套列表中元素的索引查找嵌套列表的最小值和最大值
【发布时间】:2017-12-05 21:17:06
【问题描述】:

我有一个嵌套列表,如下所示:

x = [[1,  5, 3,  4], 
     [5, 10, 7,  8], 
     [9,  9, 2, 12]]

我需要找到嵌套列表转置的最小值和最大值,使得最小值的结果是:

1, 5, 2, 4  # 1 is the min of first column (1, 5, 9) a.s.o

最大值应该是:

9, 10, 7, 12

我尝试先将其转换为 dataframe,然后在不同的轴上执行 max 和 min,但都没有得到我想要的结果。

【问题讨论】:

  • 4 是从哪里来的 min97max 相同吗?为什么嵌套列表只有 3 个时结果中有 4 个值?
  • z = [min(i) for i in x] 给出了所有最小值的列表,而z = [max(i) fro i in x] 会给出其他的!

标签: python list


【解决方案1】:

您可以使用内置的mapminmax 函数和zip(*...) 换位模式执行以下操作:

min_x = list(map(min, zip(*x)))
max_x = list(map(max, zip(*x)))

或者正如Chris_Rands 所指出的,这种缩短的形式也可以使用:

min_x = list(map(min, *x))
max_x = list(map(max, *x))

或者使用推导:

min_x = [min(col) for col in zip(*x)]
max_x = [max(col) for col in zip(*x)]

如果你拼命想写一行:

min_x, max_x = zip(*[(min(col), max(col)) for col in zip(*x)])

【讨论】:

  • list(map(min, *x))
  • 90% 的时间里,一个问题最难的部分是理解它;不是实际的编码困难..干得好! +1
【解决方案2】:

您可以使用列表推导或其他方式:

print([min(item) for item in zip(*x)])

等同于:

min_list=[]
for i in zip(*x):
    min_list.append(min(i))
print(min_list)

输出:

[1, 5, 2, 4]

最大:

print([max(item) for item in zip(*x)])

等同于:

max_list=[]
for i in zip(*x):
    max_list.append(max(i))

print(max_list)

输出:

[9, 10, 7, 12]

【讨论】:

    【解决方案3】:

    只需使用 numpy 模块:

    import numpy as np
    
    x = np.array([[1,  5, 3,  4], [5, 10, 7,  8], [9,  9, 2, 12]])
    print(np.min(x, 0))    # [1 5 2 4]
    print(np.max(x, 0))    # [ 9 10  7 12]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-24
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2021-01-13
      • 1970-01-01
      相关资源
      最近更新 更多