首页 > 解决方案 > Python - 对元组列表的最大/最小值执行更改

问题描述

我有以下(x,y)元组列表:

[(0, 0), (36, 0), (0, 36), (4, 19), (19, 4), (36, 36)]

x我想迭代的最小的元组和我想迭代的最小x+1的元组。这应该产生以下内容:yy+1

[(1, 1), (36, 1), (1, 36), (4, 19), (19, 4), (36, 36)]

由于最小的xy都是 0,我们将它们更改为0+1

x类似地,我想为最大和y=> 最大x应该更改为x-1和最大y应该更改为 做类似的事情y-1

执行这两个更改后的最终输出应该是:

[(1, 1), (35, 1), (1, 35), (4, 19), (19, 4), (35, 35)]

执行此操作的最有效方法是什么?我将使用超过 1000 个元素的列表,因此时间效率是关键。

标签: pythonlistloopstuples

解决方案


首先找到最小的 x 和 y 值。

>>> lst = [(0, 0), (36, 0), (0, 36), (4, 19), (19, 4), (36, 36)]
>>> min_x = min(x for x, y in lst)
>>> min_y = min(y for x, y in lst)
>>> min_x
>>> 0
>>> min_y
>>> 0

然后,迭代lst并添加1到等于它们各自最小值的每个坐标。

>>> lst = [(x + (x == min_x), y + (y == min_y)) for x, y in lst]
>>> lst
>>> [(1, 1), (36, 1), (1, 36), (4, 19), (19, 4), (36, 36)]

请注意,加到True一个数字上加1,加到一个数字上加False零,例如

>>> 36 + True
>>> 37
>>> 36 + False
>>> 36

max您可以使用内置函数以类似的方式处理问题的第二部分。


推荐阅读