python算法

一些面试题总结

廉价感情. 提交于 2019-11-29 03:22:33
合并字典:请合并下面两个字典 a = {"A":1,"B":2},b = {"C":3,"D":4} dict1 = {"A": 1, "B": 2} dict2 = {"C": 3, "D": 4} # 方式一 **表示打散 print({**dict1, **dict2}) # * ** 都表示打散可迭代对象 # 方式二 update方法 dict1.update(dict2) # 合并字典 元组操作:如何把元组 ("a","b") 和元组 (1,2),变为字典 {"a":1,"b":2} # zip的使用 a = ("a", "b") b = (1, 2) print(dict(zip(a, b))) 交换字典的键和值 dict1 = {"A": 1, "B": 2} res = {k: v for v, k in dict1.items()} print(res) 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢? Python交换两个变量的值 a,b=b,a 这个不是元组解包,在栈的顶端做两个值的交换。 read()/readline()/readlines() with open('test.txt', 'r', encoding='utf-8') as f: text = f.read() print(text) with

算法第一次作业——python编码规范参考及《数学之美》读后感

倾然丶 夕夏残阳落幕 提交于 2019-11-29 03:20:20
一、 说明 为了规范 Python代码的书写,提高代码的可读性,使编码人员在代码上更好的协作,制定了本规范。 编码规范的作用: 提高可读性 ——“任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。”编码规范,帮助我们写出人类容易理解的代码。 统一全局,促进团队协作 —— 开发是一个团队活动,而不是个人的英雄主义。 有助于知识传递,加快工作交接 ——风格的相似性,能让编码人员更迅速,更容易理解一些陌生的代码,更快速地理解别人的代码。 减少名字增生,降低维护成本 ——在没有规范的情况下,很容易为同一类型的实例起不同的名字。 强调变量之间的关系,降低缺陷引入的机会 ——命名可以表示一定的逻辑关系,使开发人员在使用时保持警惕,从而一定程度上减少缺陷被引入的机会。 提高个人能力 二、 内容 1. 代码布局 1.1 缩进 推荐以 4个空格作为一个缩进层次。 1.2 表达式和语句中的空格 1. 前导空格(缩进) 最流行的 Python缩进方式是仅使用空格,其次是仅使用制表符。对于新的项目,应该仅使用空格而不是制表符。 2. 非前导空格 非前导空格在 Python代码中没有意义,但适当地加入非前导空格可以增进代码可读性: ( 1)在二元算术、逻辑运算符前后加空格,如: ** 示例: ** a = b + cif a and b: pass ( 2

如何通过python进行编写RRT(快速随机生成树)算法(路径规划问题)?

不羁岁月 提交于 2019-11-29 02:00:53
RRT RRT,快速随机生成树,顾名思义,是一种路径规划问题。 假如,我们要设计一个自动规划路径的机器人,适用场景在室内。但是,在室内有很多家具的阻碍,我们需要机器人避开阻碍到达终点。现在,我们可以进行编写程序了。 第一步,我们设定起点和终点,以及每次随机路径的步长,并导入一些python实现RRT算法的一些库。 import numpy as np import matplotlib.pyplot as plt import random import math start_x= 0 start_y= 0 goal_x=100 goal_y=-2 max_size=1000 truepath=[] #initial the start and the goal px=start_x py=start_y foot_length=10 i=0 x=[0] y=[0] 第二步,我们生成随机点,然后进行判断新生成的路劲是否在障碍物上,如果符合条件,则存放在队列中。 for j in range(1000000): num1=random.random() num2=random.random() random_x=120 * num1 random_y=5 * (-0.5 + num2) if random_x>px: new_x=px+(random_x-px)/foot

python笔记-算法及数据结构4

十年热恋 提交于 2019-11-29 00:59:31
1 栈 一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能在容器一端进行加入数据和输出数据的运算。 特点:后进先出 栈里面的概念:入栈(也叫压栈),出栈,栈顶,栈底,栈顶元素,栈底元素 2 队列 队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 特点:先进先出 3 栈的实现 栈可以用顺序表实现,也可以用链表实现 class zhan(object): def __init__(self): self.__list=[] def put(self,item): self.__list.append(item) def pop(self): self.__list.pop() def peek(self): if self.__list: return self.__list[-1] else: return None def is_empty(self): return self.__list==None def length(self): return len(self.__list) 4 队列的实现 class queue(object): def __init__(self): self.__list=[] def enqueue(self,item): self.__list.append(item) def dequeue(self):

Python程序设计基础教学大纲

纵然是瞬间 提交于 2019-11-28 23:34:18
转载网址:https://mp.weixin.qq.com/s?__biz=MzI4MzM2MDgyMQ==&mid=2247486738&idx=1&sn=c5624774190b7f707d04f36d15bd5552&chksm=eb8aa648dcfd2f5ef922f832051b4782de195d161c40f3952042f5cab07a27075078936ccc2b&scene=21#wechat_redirect 《Python程序设计基础 》 教 学 大 纲 目 录 一、 课程简介 二 、 教学目的和要求 三 、 教学中应注意的问题 四、 教学内容 五 、 教学课时分配 六 、 教材与 参考书目 一、 课程简介 课程名称: Python 程序设计基础 课程编号: ********** 课程性质:必修 适用专业:非计算机专业 前导课程:无 考核方式:考试 建议学时: 48+16(可根据实际需要进行调整) 建议学期: 2、4、5 二 、 教学目的和要求 通过本课程的学习,使得学生能够理解 Python的编程模式(命令式编程、函数式编程),熟练运用Python运算符、内置函数以及列表、元组、字典、集合等基本数据类型和相关列表推导式、切片等特性来解决实际问题,熟练掌握Python分支结构、循环结构、函数设计以及类的设计与使用,熟练使用字符串方法,适当了解正则表达式

python学习笔记-马哥2017

会有一股神秘感。 提交于 2019-11-28 23:27:29
编程语言 1、用户: 问题空间 2、计算机:解决问题 解空间 抽象 机器代码->微码语言->高级语言 功能作用 shell编程 控制语言:胶水语言 框架:web,Django 字节码:bytecode python编码语言初接触 python运行 source code(.py) comolier(PVM编程虚拟机) bytecode(.pyc) interpreter(PVM执行虚拟机) processor python实现 Cpython:原始、标准的实现方式 Jython:用于与java语言集成的实现 IronPython:用于与.NET框架集成的实现 python性能优化工具 Psyco:扩展模块,算法优化,被PyPy代替 PyPy:python解释器,动态编译器 Shed Skin:编译器,转换成优化的C++代码 编写、执行python代码 交互式解释器:直接启动python python程序文件(.py) 示例: #!/usr/bin/python #解析器 import platform #导入python模块 print platform.uname() #打印uname结果 linux运行结果: root @kali :~/ 桌面/python_pratice # chmod +x firstcode.py root @kali :~/ 桌面/python

Python~list,tuple^_^dict,set

别说谁变了你拦得住时间么 提交于 2019-11-28 23:21:07
tuple~(小括号) list~【中括号】 和list比较,dict有以下几个特点: dict~{‘key’:value,} set~set([1,2,3]) tuple一旦初始化就不能修改~指向不变 list是一种有序的集合,可以随时添加和删除其中的元素 1查找和插入的速度极快,不会随着key的增加而增加; dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 也是一组key的集合,但不存储value 在set中,没有重复的key 嵌套list t=(‘a’,’b’,[‘c’,’d’]) 数据类型可以不一样,可嵌套list 2需要占用大量的内存,内存浪费多。 dict是用空间来换取时间的一种方法 set([1,2,3]) 特殊t=(1)指代1 t=(1,)一个元素 班里同学名字,部门 dict的key必须是 不可变对象 重复元素自动过滤 s = set([1, 1, 2, 2, 3, 3])去2去3 classmates=('刘二',‘李三’) classmates=['王五',‘张三’] 通过key计算位置的算法称为哈希算法(Hash)。 添加s.add() Python的函数返回多值其实就是返回一个tuple len()取长度 长度空位0 判断key值存在否:‘a’in dict; d.get(‘a’) d

python笔记-算法及数据结构3

巧了我就是萌 提交于 2019-11-28 23:11:33
1 链表 链表是一种常见的基础数据结构,不像顺序表一样连续存储数据,而是在每一个节点存储数据和下一个节点的位置信息。 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 2 单向链表 2.1 节点 每个节点包含两个部分:元素域和链接域,链接指向链表中的下一个节点。 第一个节点称为头结点,最后一个节点称为尾结点。 尾结点的链接域指向为空。 3 python中变量标识的本质 python中的变量维护的只是一个地址,这个地址指向的类型不同,则变量代表的类型就不同,这也是python中变量类型可以变化的原因。 4 单链表的实现 4.1 节点的实现 class SingleNode(object): def __init__(self,item): self.item=item self.next=None 4.2 单链表的实现 class SingleLindList(object): def __init__(self,node=None): self._head=node 4.3 单链表中方法的设计 注意异常情况,如首节点和尾节点的处理 注意循环的结束条件,cur!=None和cur.next!=None 5 链表与顺序表的差异 顺序表读取数据很方便,但是需要连续内存来存储。 链表访问数据需要进行遍历,但是可以更加灵活地使用不连续内存存储数据,相应地,因为除了数据外还存有地址

《面试》-- 简单使用Python解决图结构的最小路径 -- Dijkstra算法

不打扰是莪最后的温柔 提交于 2019-11-28 22:02:30
写在前面 在你观看这篇博客之前,我必须种草、安利一个讲DFS、BFS、Dijkstra的视频,非常建议想学习经典图算法的猴子去看看,时间不长但是很精辟别忘了点赞啊,链接: https://www.bilibili.com/video/av25829980?from=search&seid=12399862396157246554 回归正题 图如图所示,假设起点为A,找出起点到剩下各个点的最短路径。 思路:本人肤浅,只知道Dijkstra算法就是专门用来解决这个问题,直接用Dijkstra就可以了。 过程: 代码: import heapq Graph = { 'A': {'B': 5, 'C': 1}, 'B': {'A': 5, 'C': 2, 'D': 1}, 'C': {'A': 1, 'B': 2, 'D': 4, 'E': 8}, 'D': {'B': 1, 'C': 4, 'E': 3, 'F': 6}, 'E': {'C': 8, 'D': 3}, 'F': {'D': 6} } def Dijkstra(Graph, start): assert isinstance(Graph, dict) assert isinstance(start, str) assert start in Graph.keys() # 使用优先队列实现 pqueue = [] heapq

Python 十大装 B 语法

£可爱£侵袭症+ 提交于 2019-11-28 20:33:17
作者 | 许向武 责编 | 郭芮 出品 | CSDN 博客 Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 for - else 什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的。十大装B语法,for-else 绝对算得上南无湾!不信,请看: >>> for i in [1,2,3,4]: print(i) else: print(i, '我是else') 1 2 3 4 4 我是else 如果在 for 和 else 之间(循环体内)有第三者 if 插足,也不会影响 for 和 else 的关系。因为 for 的级别比 if 高,else 又是一个攀附权贵的家伙,根本不在乎是否有 if,以及是否执行了满足 if 条件的语句。else 的眼里只有 for,只要 for 顺利执行完毕,else 就会屁颠儿屁颠儿地跑一遍: >>> for i in [1,2,3,4]: if i > 2: print(i)