【Python】list 列表中递归插入数据
2023-09-14 09:15:12 时间
Python 递归补点
任务:
- Python 列表按某一个元素进行排序
- Python 递归插入补点, 列表相加
- Python OpenCV 显示插入点的效果
"""
任务:
1. Python 列表按某一个元素进行排序
2. Python 递归插入补点, 列表相加
3. Python OpenCV 显示插入点的效果
注: 本程序主要作为实例展示, 不推荐生产环境使用
"""
import cv2
import numpy as np
class CRecursionInsert(object):
def __init__(self):
self.canvas = np.zeros((512, 512, 3), np.uint8)
self.srcPtSet = [] # 原始点集
pt = {}
pt["x"]=50
pt["y"]=50
self.srcPtSet.append(pt)
pt = {}
pt["x"]=300
pt["y"]=40
self.srcPtSet.append(pt)
pt = {}
pt["x"]=400
pt["y"]=300
self.srcPtSet.append(pt)
pt = {}
pt["x"]=200
pt["y"]=200
self.srcPtSet.append(pt)
print("原始点集: \n", self.srcPtSet)
self.__show_pt_canvas("src", self.srcPtSet)
def __show_pt_canvas(self, win_name:str, pt_list: list, color: tuple=(0, 255, 0), radius:int=3):
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)
_canvas = self.canvas.copy()
# 将列表中的点显示出来
for i in range(len(pt_list)-1):
pt = (pt_list[i]["x"], pt_list[i]["y"])
cv2.circle(_canvas, pt, radius, color, radius, 8, 0)
if (len(pt_list)-1) > 1:
pt2 = (pt_list[i+1]["x"], pt_list[i+1]["y"])
cv2.line(_canvas, pt, pt2, color, 1, 8, 0)
cv2.circle(_canvas, pt2, radius, color, radius, 8, 0)
cv2.imshow(win_name, _canvas)
def __recursion_insert(self, p1, p2, pt_list):
pm = {}
if (p2["x"]-p1["x"]>1):
pm["x"] = int((p2["x"] + p1["x"]) * 0.5 + 0.5)
pm["y"] = int((p2["y"] + p1["y"]) * 0.5 + 0.5)
pt_list.append(pm)
self.__recursion_insert(p1, pm, pt_list)
self.__recursion_insert(pm, p2, pt_list)
def process(self):
def __take_x(elem):
return elem["x"]
# 按照 x 大小排序
self.sortedPtSet = sorted(self.srcPtSet, key=__take_x)
print("原始点集按照 x 从小到大排序后: \n", self.sortedPtSet)
# 初始化插值算法
insert_pt_list = []
for ix in range(len(self.sortedPtSet)-1):
pt1 = self.sortedPtSet[ix]
pt2 = self.sortedPtSet[ix+1]
pt_list = []
self.__recursion_insert(pt1, pt2, pt_list)
insert_pt_list += pt_list
# 对插入后的 list 进行排序
insert_pt_list = sorted(
sorted(insert_pt_list, key=__take_x), key=__take_x)
# for i in range(50):
# print(insert_pt_list[i], " ")
# 显示插值后的点集
self.__show_pt_canvas("result", pt_list=insert_pt_list, color=(0, 255, 255), radius=1)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
obj = CRecursionInsert()
obj.process()
原始点集:
[{'x': 50, 'y': 50}, {'x': 300, 'y': 40}, {'x': 400, 'y': 300}, {'x': 200, 'y': 200}]
原始点集按照 x 从小到大排序后:
[{'x': 50, 'y': 50}, {'x': 200, 'y': 200}, {'x': 300, 'y': 40}, {'x': 400, 'y': 300}]
相关文章
- python使用RSA加密算法
- 浙江新增python编程_9月起,浙江省八年级新增Python编程课,未来编程是处理大数据的手段…「建议收藏」
- python之列表(list)
- Python列表(list)详解[通俗易懂]
- Python 反转字符串_python输出字符串
- 关于python中lambda函数的描述_Python全局变量
- python自动化测试—Python自动化框架及工具
- eval在python中是什么意思_如何在Python中使用eval ?
- Python list列表详解
- Python list列表查找元素
- python定时器爬取豆瓣音乐Top榜歌名详解编程语言
- Python获取上一个月的天数详解编程语言
- [置顶] 用python生成验证码图片详解编程语言
- Linux创建Python文件的步骤(linux新建python文件)
- Python 列表(List)详解编程语言
- Python list列表的相关函数
- Python list()和tuple()函数用法
- 快速安装Python MySQL模块(python安装mysql模块)
- 安装Python MySQL驱动之快速指南(python安装mysql驱动)
- Redis 轻松存储列表数据:使用 Redis 保存 List 的方法(redis保存list)
- 在Linux上运行Python脚本的简单指南(linux运行python)
- Python如何连接MySQL数据库(python怎么连接mysql数据库)
- 在Linux系统中使用Python编程语言(linux中python)
- Redis List实现的双向链表功能(redis里面的list)
- Python实现读取目录所有文件的文件名并保存到txt文件代码
- Python中列表(list)操作方法汇总