python - Python - 对元组列表的最大/最小值执行更改
问题描述
我有以下(x,y)
元组列表:
[(0, 0), (36, 0), (0, 36), (4, 19), (19, 4), (36, 36)]
x
我想迭代的最小的元组和我想迭代的最小x+1
的元组。这应该产生以下内容:y
y+1
[(1, 1), (36, 1), (1, 36), (4, 19), (19, 4), (36, 36)]
由于最小的x
和y
都是 0,我们将它们更改为0+1
。
x
类似地,我想为最大和y
=> 最大x
应该更改为x-1
和最大y
应该更改为 做类似的事情y-1
。
执行这两个更改后的最终输出应该是:
[(1, 1), (35, 1), (1, 35), (4, 19), (19, 4), (35, 35)]
执行此操作的最有效方法是什么?我将使用超过 1000 个元素的列表,因此时间效率是关键。
解决方案
首先找到最小的 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
您可以使用内置函数以类似的方式处理问题的第二部分。
推荐阅读
- java - 改造响应 500 空消息
- python - 我想制作一个随机数字和字母生成器,但这不起作用
- java - 为什么 Admob 插页式广告不显示在 AndroidOS 上?
- android - Jetpack Compose - 如何从 pointerInteropFilter 中提取目标
- r - 正则表达式字符串匹配单词模式
- ansible - ansible - 当 result.stdout 超过 1 行时失败
- python - 如何使用全局变量更新标签
- websphere - 如何将 IBM Maximo Websphere 主机添加到 Windows Server 网络负载平衡集群?
- bootstrap-4 - 如何仅在索引页面上显示轮播并使其适合整个屏幕?- asp.net 核心 mvc 引导程序
- javascript - 如何在反应中使用类 npm 包