Python中多维数组的最小/最大值如何返回?

7

I have a list in the form of

[ [[a,b,c],[d,e,f]] , [[a,b,c],[d,e,f]] , [[a,b,c],[d,e,f]] ... ] etc.

我希望您能返回最小的c值和最大的c+f值。这可行吗?

12
可以的,你尝试过什么?一切皆有可能。 - JBernardo
尝试使用min(list[0][2])等方法来获取每个元素的第0个聚类中最大的第二个索引。不知道如何做后者。 - John Smith
Charlie:不,只是在尝试组织一个个人项目。我是一名建筑系的毕业生。 - John Smith
5个回答

16

对于最小值c

min(c for (a,b,c),(d,e,f) in your_list)

c+f 的最大值

max(c+f for (a,b,c),(d,e,f) in your_list)

示例:

>>> your_list = [[[1,2,3],[4,5,6]], [[0,1,2],[3,4,5]], [[2,3,4],[5,6,7]]]
>>> min(c for (a,b,c),(d,e,f) in lst)
2
>>> max(c+f for (a,b,c),(d,e,f) in lst)
11

这看起来运行得非常好,谢谢!我不知道你可以用这种方式(A for B in C格式)做到这一点。 - John Smith
我喜欢它。我不确定列表推导式是向初学者解释它的最佳方式,但这是一段可爱的代码。 - Charlie Martin
1
哦,顺便说一下,约翰,这种代码你想要的神奇术语是“列表推导式”。 - Charlie Martin
1
@CharlieMartin:这是一个生成器表达式,而不是一个列表推导式 - johnsyweb

5

列表推导式救了我们的大忙

a=[[[1,2,3],[4,5,6]], [[2,3,4],[4,5,6]]]
>>> min([x[0][2] for x in a])
3

>>> max([x[0][2]+ x[1][2] for x in a])
10

1

你需要将列表映射到仅包含你关心的项。

以下是一种可能的方法:

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

minc = min(l[0][2] for l in x)
maxcf = max(l[0][2]+l[1][2] for l in x)

minmax调用的内容被称为"生成器",负责将原始数据映射到过滤后的数据。


1
当然可以。你有一个包含两个元素列表的列表,这些列表实际上也是列表。你的基本算法是:
for each of the pairs
    if c is less than minimum c so far
       make minimum c so far be c
    if (c+f) is greater than max c+f so far
       make max c+f so far be (c+f)

1
假设你的列表存储在my_list中:
min_c = min(e[0][2] for e in my_list)
max_c_plus_f = max(map(lambda e : e[0][2] + e[1][2], my_list))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接