获取一个导致在嵌套列表中的最大或最小的索引列表

获取一个导致在嵌套列表中的最大或最小的索引列表

问题描述:

可以说我有这样的结构获取一个导致在嵌套列表中的最大或最小的索引列表

[[[1,2],[3,4]],[[8,9],[7,7]]] 

我想要遍历列表,并有这样的结果:

[[3,2],[8,7]] 

这将会将第一级[[1,2],[3,4]]中的数组列表减少为一个单一数组,其中第一个元素选择的最大值和第二个元素的最小值选定。

我已经手动完成了它,只是迭代组,再次迭代,存储第一个值并查看下一个是更大还是更小,我将它存储在列表中并创建另一个列表。

我想找到一个更优雅的方法与列表解析等,我敢肯定,我可以使用压缩在这里分组的值在同一组,但我迄今没有成功。

您可以使用zip,并通过解压缩结果为单个值这是很容易做到的,你在找什么,比如:

>>> x = [[[1,2],[3,4]],[[8,9],[7,7]]] 
>>> [[max(a), min(b)] for k in x for a, b in [zip(*k)]] 
[[3, 2], [8, 7]] 

没有拆包的另一种方法是有一个骑自行车的功能迭代(max, min, max, min, ...),并使用嵌套列表解析,例如:

>>> import itertools as it 
>>> maxmin = it.cycle([max, min]) 
>>> [[next(maxmin)(a) for a in zip(*k)] for k in x] 
[[3, 2], [8, 7]] 

或者索引的函数的列表:

>>> import itertools as it 
>>> maxmin = [max, min] 
>>> [[maxmin[i](a) for i, a in enumerate(zip(*k))] for k in x] 
[[3, 2], [8, 7]] 
+0

我不一定要使用zip,这正是我可能会帮助的。我会看看这是如何适用的,这些清单实际上有四个要素。 – Trufa

+0

评论是在编辑之前的回答,我会检查这一个。 – Trufa

+0

你是什么意思4个元素,你能给出一个更完整的例子吗?这并不关心你有多少'对',或者你有多少'对',但如果你有多于'对',虽然很容易扩展,但不会工作 - 'a,b,c,d' – AChampion

这将在不压缩的工作:

mylist = [[[1,2],[3,4]],[[8,9],[7,7]]] 
[[max(y[0] for y in x), min(y[1] for y in x)] for x in mylist] 

这样做的主要缺点是,它看起来通过每个子列表两次,第一次发现(第一项)最大,一旦找到最低(第二项)。

+0

哦,不错,这看起来几乎是我所需要的,唯一的问题是我有四个,所以我将不得不迭代四次...但我不认为这是性能依赖。我会放弃它。 – Trufa