python二维列表排序_使用Python按顺时针方向排序二维坐标列表?
这应该说明问题,给出一个可视化工具
但对于在同一距离上获得一组点的正确入口点来说,这并不总是有效的import random
import pylab
import cmath
from itertools import groupby
pts = [(random.randrange(-5,5), random.randrange(-5,5)) for _ in range(10)]
# for this problem complex numbers are just too good to pass up
z_pts = [ i[0] + 1j*i[1] for i in pts if i != (0, 0)]
z_pts.sort(key = lambda x: abs(x))
gpts = [[*g] for _, g in groupby(z_pts, key = lambda x: abs(x) ) ]
print(*gpts, sep='\n')
spts = [1j/2]
for e in gpts:
if len(e) > 1:
se = sorted(e, key = lambda x: cmath.phase(-x / spts[-1]))
spts += se
else:
spts += e
print(spts)
def XsYs(zs):
xs = [z.real for z in zs]
ys = [z.imag for z in zs]
return xs, ys
def SpiralSeg(a, b):
'''
construct a clockwise spiral segment connecting
ordered points a, b specified as complex numbers
Inputs
a, b complex numbers
Output
list of complex numbers
'''
seg = [a]
if a == 0 or a == b:
return seg
# rotation interpolation with complex numbers!
rot = ( b / a ) ** ( 1 / 30 )
# impose cw rotation direction constraint
if cmath.phase( b / a ) > 0: # add a halfway point to force long way around
plr = cmath.polar( b / a )
plr = (plr[0]**(1/2), plr[1] / 2 - 1 * cmath.pi ) # the rotor/2
a_b = cmath.rect(*plr) * a # rotate the start point halfway round
return SpiralSeg(a, a_b) + (SpiralSeg(a_b, b))
for _ in range(30):
a *= rot
seg.append(a)
return seg
segs = [SpiralSeg(a, b) for a, b in zip(spts, spts[1:])]
pylab.axes().set_aspect('equal', 'datalim')
pylab.scatter(*XsYs(z_pts))
for seg in segs:
pylab.plot(*XsYs(seg))
[(1-2j), (-2-1j)]
[(2-3j)]
[(1+4j)]
[(3+3j)]
[(-3-4j), (3-4j), (4-3j)]
[(1-5j)]
[(-4-4j)]
[0.5j, (-2-1j), (1-2j), (2-3j), (1+4j), (3+3j), (-3-4j), (3-4j), (4-3j), (1-5j), (-4-4j)]
[-1j]
[(-1-1j)]
[(-1-2j), (-1+2j), (2+1j)]
[(-4+0j)]
[(1-4j)]
[-5j, (-4-3j)]
[(1-5j)]
[0.5j, -1j, (-1-1j), (-1-2j), (2+1j), (-1+2j), (-4+0j), (1-4j), (-4-3j), -5j, (1-5j)]
python二维列表排序_使用Python按顺时针方向排序二维坐标列表?相关推荐
- python 二维列表从小到大_给Python开发者准备的110道面试题
信息量非常大!这是给Python开发者准备的110道笔试面试题,我只把问题列出来了,答案见文末,建议每道题都要认真刷一遍,有些题可以尝试用多种方式来解答,甚至做延伸学习,说真的,很多题都可以单独拎出来 ...
- python 多维list 排序_人生苦短 | Python列表和元组归纳整理
1. 列表 1.1. 列表是什么? 列表是由一系列按特定顺序排列的元素组成,所以是有序的集合.列表中的元素可以是不同类型的,列表中也可以嵌套列表.在Python中,用方括号[]来表示列表,并用逗号来分 ...
- python生成二维码教程_使用Python生成个性二维码
任务目的 这一步会介绍通过Python中的MyQR包实现生成二维码的操作,包括生成普通二维码.带有静态图和动态图的二维码,同时也会对MyQR生成二维码的常用参数进行介绍说明. 任务步骤注:CVM适合用 ...
- python实现五大基本算法_算法基础:五大排序算法Python实战教程
排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...
- 数据结构python学生成绩排序_科学网—数据结构之排序一(python实现) - 郗强的博文...
本文介绍三种简单的排序算法,包括选择排序.冒泡排序和插入排序.同样每个python的排序函数都是在一个整数列表上进行操作的. 一.交换函数 在每个排序函数中都会使用一个swap函数来交换列表中两个元素 ...
- python中用def实现自动排序_用 python 实现各种排序算法
常见集中排序的算法 归并排序 归并排序也称合并排序,是分治法的典型应用.分治思想是将每个问题分解成个个小问题,将每个小问题解决,然后合并. 具体的归并排序就是,将一组无序数按n/2递归分解成只有一个元 ...
- python运维工程师招聘_【python自动化运维工程师工资】图灵学院2020年python自动化运维工程师工资待遇-看准网...
职位描述 招聘要求: 至少满足下面三个招聘方向中的一条. 招聘主要方向: 一.python web高级讲师 职位要求: 1.精通Python,具有python web开发经验,有参与多个完整的项目生命 ...
- python字典按键值排序_在Python中按键或值按升序和降序对字典排序
python字典按键值排序 Problem Statement: Write a Python program to sort (ascending and descending) a diction ...
- python的列表操作_在Python中列表的操作
列表可以做什么? 假设你要创建一个基于<Go Fish>的游戏.如果你不知道<Go Fish>是什么,就去网上查一下.要实现这个游戏,你需要有一个办法,把"一摞纸牌& ...
- python 多关键字排序_用Python排序字典
python 多关键字排序 介绍 (Introduction) In this tutorial, we are going to take a look at the various ways fo ...
最新文章
- 听说做前后端的都是这个体会? | 每日趣闻
- 用C#制作新闻阅读器(电脑报2005年3月14日 第10期)
- (五) 定点迭代法求根
- 1.0 深度学习回顾与PyTorch简介 - PyTorch学习笔记
- Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)
- jQuery获取iframe的document对象的方法
- 如何求欧拉函数~转载
- 【CSS3】CSS——链接
- git提交后的自动化流程构建
- Wmware安装Centos7教程
- Facebook 真的「非死不可」吗?
- StrangeIoC —— Unity MVC 专属框架
- 新手开发记录:把ListView、Adapter的逻辑捋顺,做一个微博热搜吧
- 代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。...
- TIS-prescan
- 多媒体教室建设方案综述
- electron tray click right click
- 创业不是 闹着玩的,水很深,
- 河南灵活用工系统开发|灵活用工平台能为企业带来什么?
- 《“爱”是如此的容易...》