让我说我有这个结构
[[[1,2],[3,4]],[[8,9],[7,7]]]
我想迭代列表并得到这个结果:
[[3,2],[8,7]]
这会将第一级[[1,2],[3,4]]
中的数组列表列表减少为一个单独的数组,其中为第一个元素选择最大值,为第二个元素找到最小值。
我已经手动完成了它,只是迭代组,再次迭代,存储第一个值并查看下一个是更大还是更小,我将它存储在列表中并创建另一个列表。
我想找到一个更优雅的方法,列表推导等等,我很确定我可以在这里使用zip将值组合在同一组中,但到目前为止我还没有成功
答案 0 :(得分:1)
这将无拉链工作:
{{1}}
这样做的主要缺点是它会查看每个子列表两次,一次查找最大值(第一项)和一次查找最小值(第二项)。
答案 1 :(得分:1)
您可以使用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]]