python算法

python基础面试题整理---从零开始 每天十题(03)

别说谁变了你拦得住时间么 提交于 2020-03-06 02:54:36
一、Q: 用Python输出一个Fibonacci数列?(斐波那契额数列)   A:我们先来看下代码 #!/usr/bin/env python # -*- coding: utf-8 -*- def fib_recur(n): if n <= 1: return n return fib_recur(n - 1) + fib_recur(n - 2) for i in range(1, 20): print(fib_recur(i), end=" ") 我们来详细的看一下代码,我们知道斐波那契数据为1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,由此我们可以得知,   F(0) = 0   F(1) = 1,   F(2) = F(1) + F(0),   F(3) = F(2) + F(1),   F(4) = F(3) + F(2),   F(5) = F(4) + F(3) 所以我们可以得知F(n) = F(n-1) + F(n-2)。 二、Q:介绍一下Python中webbrowser的用法?   A:webbrowser主要是用来驱动浏览器进行操作的,最简单的实例。 #!/usr/bin/env python # -*- coding: utf-8 -*- import webbrowser as

Python高级特性

你离开我真会死。 提交于 2020-03-06 02:53:51
减少代码,提高效率 1.切片 取一个序列的部分元素 L [ start : end : step ] 含头不含尾 1 #!/usr/bin/python3 2 # -*- coding:utf-8 -*- 3 4 L = [ 1, 3, 6, 9, 45, 66] 5 6 print ( L[:4] ) #等同于L[0:4] 切片下标为 0 ~ 3 7 print ( L[-2:] ) #倒数切片 从倒数第2开始往后切 倒数第二、倒数第一 8 print ( L[:5:2] ) #前5个数,每2个取一个 9 print ( L[::5] ) #所有数,每5个取一个 L[ : : -1] 倒切 2.迭代 在Python中,迭代是通过 for...in 来完成的,而很多语言迭代 list 是通过下标完成的。 无论有无下标都可以迭代,如dict dict不是按顺序排列存储,迭代出的结果顺序很可能不一样 dict默认迭代 key 如要要迭代 value: 同时迭代 key 和 value : 判断是否可以迭代 3.迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。 凡是可作用于for循环的对象都是Iterable类型,即迭代对象 凡是可作用于next()函数的对象都是Iterator类型,即迭代器,表示一个惰性计算的序列(只有在需要返回下一个数据时它才会计算)

数据结构与算法 python--第五节 排序(二)选择排序

↘锁芯ラ 提交于 2020-03-06 02:08:24
文章目录 5 排序 5.1 冒泡排序 5.2 选择排序 选择排序分析 自己初步实现的代码 实现代码(正确) 5 排序 5.1 冒泡排序 数据结构与算法 python–第五节 排序(一)冒泡排序 5.2 选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。 选择排序分析 排序过程:(此处以选择最大元素为例,代码实现为选择最小元素) 自己初步实现的代码 def select_sort ( alist ) : n = len ( alist ) for j in range ( n - 1 ) : for i in range ( j + 1 , n ) : if alist [ j ] > alist [ i ] : alist [ j ] , alist [ i ] = alist [ i ] ,

python【数据结构与算法】内置函数 zip() 函数(看不懂你来打我)

筅森魡賤 提交于 2020-03-05 15:22:46
文章目录 描述 语法 返回值 实例 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。 zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。 如果需要了解 Pyhton3 的应用,可以参考 Python3 zip()。 语法 zip ( [ iterable , . . . ] ) 参数说明: iterabl – 一个或多个迭代器; 返回值 返回元组列表。 实例 以下实例展示了 zip 的使用方法: >> > a = [ 1 , 2 , 3 ] >> > b = [ 4 , 5 , 6 ] >> > c = [ 4 , 5 , 6 , 7 , 8 ] >> > zipped = zip ( a , b ) # 打包为元组的列表 [ ( 1 , 4 ) , ( 2 , 5 ) , ( 3 , 6 ) ] >> > zip ( a , c ) # 元素个数与最短的列表一致 [ ( 1 , 4 ) , ( 2 , 5 ) , ( 3 , 6 ) ] >> > zip ( * zipped )

Python算法的七个重要特征

别等时光非礼了梦想. 提交于 2020-03-05 12:04:13
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。算法是Python开发中重要知识技能,不可避免的要使用到该技能,那么,Python算法有什么特点呢? 一个Python算法应该具有以下七个重要的特征: 有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止; 确切性(Definiteness):算法的每一步骤必须有确切的定义; 输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性); 高效性(High efficiency):执行速度快,占用资源少; 健壮性(Robustness):对数据响应正确。 Python算法除了具有以上特征,还和时间和空间有关系,不同的算法可能用不同的时间、空间或效率来完成同样的任务,因此

力扣第15题 三数之和 python

吃可爱长大的小学妹 提交于 2020-03-04 22:05:59
思路: 这个题有点难,如果暴力算法一定超时,然后采用了双指针,但是考虑方面有点多,要先排序,再排除一些不可能的情况,再讨论去重(分别在k,j,i)再进行定k,同时i和j进行双指针算法,i进行i++,j进行j– 组织以后:先顺序排序,再从头到尾,循环取一个值(k),作为三数之一。 循环内,另外两个数(i和j),分别从左边最近的(i),以及最后的(j)开始取值,求和。 和为0,则加入结果数组,同时两数向内分别移动,并判断去重。 和大于0,则后面的数前移,同样判断去重。 和小于0,则前面的数后移,同样判断去重。 最后,递增第一个数下标的同时,判断去重。 class Solution : def threeSum ( self , nums : List [ int ] ) - > List [ List [ int ] ] : nums . sort ( ) result , k = [ ] , 0 for k in range ( len ( nums ) - 2 ) : if nums [ k ] > 0 : break if k > 0and nums [ k ] == nums [ k - 1 ] : continue i , j = k + 1 , len ( nums ) - 1 while i < j : s = nums [ k ] + nums [ i ] + nums

python【力扣LeetCode算法题库】994-腐烂的橘子(BFS)

元气小坏坏 提交于 2020-03-04 14:44:27
腐烂的橘子 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。 示例 1: 输入:[[2,1,1],[1,1,0],[0,1,1]] 输出:4 示例 2: 输入:[[2,1,1],[0,1,1],[1,0,1]] 输出:-1 解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。 示例 3: 输入:[[0,2]] 输出:0 解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。 提示: 1 <= grid.length <= 10 1 <= grid[0].length <= 10 grid[i][j] 仅为 0、1 或 2 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/rotting-oranges 定义一个移动坐标表示四个方向的数组,然后 queue.append((i, j, time)) loc_x, loc_y, time = queue.pop(0) 深搜即可 class Solution ( object ) : def

Python开发【面试】:刷题

天涯浪子 提交于 2020-03-04 06:14:11
面试题 1、到底什么是Python? Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译(一边编写一边执行,先把代码转化成字节码,然后python虚拟机去执行)。其他解释型语言还包括PHP和Ruby Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class) Python代码编写快,但是运行速度比编译语言通常要慢。好在Python允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的 Python用途非常广泛——网络应用,自动化,科学建模,大数据应用,爬虫等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况 Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节 2、补充缺失的代码 def print_directory_contents(sPath): ''' 输入文件夹的路径(绝对和相对均可) 打印文件夹里面包含的所有文件名(子子孙孙,带完整的路径) '''' 1 def print_directory_contents(sPath): 2 import os 3 for sChild in os.listdir(sPath): 4 sChild = os

Python面试必须要看的15个问题

筅森魡賤 提交于 2020-03-04 06:12:48
转自: Python面试必须要看的15个问题 引言 想找一份Python开发工作吗?那你很可能得证明自己知道如何使用Python。下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身,不是某个特定的包或模块。每一个问题都可以扩充为一个教程,如果可能的话。某些问题甚至会涉及多个领域。 我之前还没有出过和这些题目一样难的面试题,如果你能轻松地回答出来的话,赶紧去找份工作吧! 问题1 到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做)。 答案 下面是一些关键点: Python 是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。 Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似 x=111 和 x="I'm a string" 这样的代码,程序不会报错。 Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access specifier,类似C++中的 public 和 private ),这么设计的依据是“大家都是成年人了”。 在Python语言中,函数是第一类对象(first-class

Python面试必须要看的15个问题

女生的网名这么多〃 提交于 2020-03-04 06:12:00
引言 想找一份Python开发工作吗?那你很可能得证明自己知道如何使用Python。下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身,不是某个特定的包或模块。每一个问题都可以扩充为一个教程,如果可能的话。某些问题甚至会涉及多个领域。 我之前还没有出过和这些题目一样难的面试题,如果你能轻松地回答出来的话,赶紧去找份工作吧! 问题1 到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做)。 答案 下面是一些关键点: Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。 Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似 x=111 和 x="I'm a string" 这样的代码,程序不会报错。 Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access specifier,类似C++中的 public 和 private ),这么设计的依据是“大家都是成年人了”。 在Python语言中,函数是第一类对象(first-class objects)。这指的是它们可以被指定给变量