python - 递归 二分法
一、一些内置函数
1、revsered 翻转,返回的是迭代器
# 将 s 倒置
s = '不是上海自来水来自海上'
# 方法一
print(s[::-1])
# 方法二
s1 = reversed(s)
i = ''
for el in s1:
i +=el
print(i)
2、slice 切片
lis = ['nishi','woshi','shuia','benjim']
s = slice(1,3)
print(lis[s])
3、format
# 格式化输出
s = "我叫{name},我想去{adress},我喜欢{hobby}.".format(name='zhangmeng',adress='上海',hobby='dance')
print(s) # 字符串
print(format('test', '<20')) # 左对齐
print(format('test', '>20')) # 右对齐
print(format('test', '^20')) # 居中
# 数值
print(format(3, 'b')) # 二进制
print(format(97, 'c')) # 转换成unicode字符
print(format(11, 'd')) # 十进制
print(format(11, 'o')) # 八进制
print(format(11, 'x')) # 十六进制(小写字母)
print(format(11, 'X')) # 十六进制(大写字母)
print(format(11, 'n')) # 和d一样
print(format(11)) # 和d一样
# 浮点数
print(format(123456789, 'e')) # 科学计数法. 默认保留6位小数
print(format(123456789, '0.2e')) # 科学计数法. 保留2位小数(小写)
print(format(123456789, '0.2E')) # 科学计数法. 保留2位小数(大写)
print(format(1.23456789, 'f')) # 小数点计数法. 保留6位小数
print(format(1.23456789, '0.2f')) # 小数点计数法. 保留2位小数
print(format(1.23456789, '0.10f')) # 小数点计数法. 保留10位小数
print(format(1.23456789e+10000, 'F')) # 小数点计数法.
4、type() 返回类型 ord() 输入字符找字符编码的位置 chr() 输入位置找出对应的字符 ascii()判断给出的信息是否是ascii
for i in range(65536):
print(chr(i), end="")
def func():
print('我是递归')
func() func() # 官方显示最多到1000.但不会跑到1000,实际到998
# 树形结构的遍历 import os
def func(lujing, n):
lis = os.listdir(lujing) # 打开文件夹,列出文件夹内的所有文件名
for el in lis: # el 为文件的名字
# 还原文件路径
path = os.path.join(lujing,el)
if os.path.isdir(path):# 判断路径是否是文件夹
print('*' * n,el) # 显示文件夹的名字
func(path, n+1) # 再来一次
else:
print('/t'*n,el) # 显示文件 func('f:/a', 0)
import os
def func(lujing, n):
lis = os.listdir(lujing ) # 打开文件夹,列出文件夹内的所有文件名
for el in lis: # el为文件名
# 还原文件的路径
path = os.path.join(lujing, el)
if os.path.isdir(path): # 判断路径是否是文件夹
print('*'* n, el) # 显示文件夹名称
func(path, n+1) # 再来一次
else:
with open(path,mode='wb') as f: # 打开文件,都写入内容
f.write(b'')
print('/t'*n, el) # 显示文件
func('F:/a',0)
# 二分法查找
lst = [1,4,6,7,9,21,23,45,67,87,65,43,89]
n = int(input('请输入一个数:'))
lst = sorted(lst)
# print(lst)
left = 0
right = len(lst)-1
while left <= right:
mid = (left + right)//2
if n > lst[mid]:
left = mid+1
elif n < lst[mid]:
right = mid -1
else:
print("存在")
break
else:
print('不存在')
# 递归 切割列表 def func(n,lst):
left = 0
right = len(lst)-1
if lst != []:
mid = (left+right)//2
if n>lst[mid]:
func(n,lst[mid+1:])
elif n < lst[mid]:
func(n,lst[:mid])
else:
print("找到了")
return
else:
print("没找到")
return n = int(input('请输入你要查找的数:'))
lst = [1,4,6,7,9,21,23,45,67,87,65,43,89] func(n,lst)
# 递归2
def func(n,lst,left,right): # 递归找到什么是可变的,什么是不可变的
if left <= right:
mid = (left+right)//2
if n > lst[mid]:
left = mid+1
return func(n,lst,left,right)
elif n < lst[mid]:
right = mid - 1
return func(n, lst, left, right)
else:
print('找到了')
return mid # 难点
else:
print('找不到')
return -1 n = int(input('请输入你要查找的数:'))
lst = [13,45,56,67,78,57,89,101]
ret = func(n,lst,0,len(lst)-1)
print(ret)
# 最快的查找方法 lst = [13,45,56,57,67,78,89,101] # 找出最大的数
new_lst = []
for i in range(99):
new_lst.append(0) for i in lst:
new_lst[i] = 1 i = int(input('请输入你要找的数据:'))
if new_lst[i] == 0:
print('不存在')
else:
print('存在')
python - 递归 二分法的更多相关文章
- Python递归二分法
# lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963] # 时间复杂度. n# # 让用户输入一个数n. 判断这个n是否出现在lst中# n = ...
- python递归和二分法
一.递归 1.递归就是自己调用自己 def fn(n): print(n) fn(n+1) fn(1) #递归深度官方1000 一般都递归到998 2.树形结构的遍历 import os def fn ...
- Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
一. lamda匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n ...
- 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法
几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...
- Python递归_打印节点信息
Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...
- Python递归实现汉诺塔
Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->' ...
- python 递归深度优先搜索与广度优先搜索算法模拟实现
一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件2.找出这一次和上一次关系3.假设当前 ...
- python递归列出目录及其子目录下所有文件
python递归列出目录及其子目录下所有文件 一.前言 函数的递归,简单来说,就是函数内部调用自己 先举个小例子,求阶乘 def factorial(n): if n == 0: return 1 e ...
- python(递归实例)
摘要:在学习python递归知识点时,总是一知半解,似懂非懂的..在反复看视频翻资料同时,也收集案例来分析求证..通过分析下面几个案例希望能有所帮助!!! 1.用递归的方法实现阶乘... def nu ...
随机推荐
- vue配置手机通过IP访问电脑开发环境
vue配置手机通过IP访问电脑开发环境config/index.js// Various Dev Server settings host: '0.0.0.0', // can be overwrit ...
- 目标URL存在跨站漏洞和目标URL存在http host头攻击漏洞处理方案
若需要学习技术文档共享(请关注群公告的内容)/讨论问题 请入QQ群:668345923 :若无法入群,请在您浏览文章下方留言,至于答复,这个看情况了 目录 HTTP协议详解 引言 一.HTTP协议详解 ...
- 前端如何生成条形码---JsBarcode
React 生成条形码代码 注:需引入 jsbarcode 插件 import React from 'react'; import JsBarcode from 'jsbarcode'; class ...
- es2018(es9)前瞻
命名捕获 语法 : ?<name> 一:举个栗子 我们要把从2018-05-20取出年月日 1:普通方法 let str = '2018-05-20'; let reg1 = /(\d{4 ...
- 防止sql注入(简单)
(1)mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 使用方法如下: $sql = "select count ...
- springboot+mybatis环境的坑和sql语句简化技巧
1.springfox-swagger实体类无限递归 https://hacpai.com/article/1525674135818 里面有不完美的解决方案 不用动源码的解决方案也有,在swagge ...
- bzoj2839 集合计数(容斥)
2839: 集合计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 883 Solved: 490[Submit][Status][Discuss] ...
- Windows 7远程桌面设置
1. 开启防火墙 可在”计算机管理“中,打开"服务和应用程序"-"服务",找到"Windows Firewall",双击"Wind ...
- java和js中int和String相互转换常用方法整理
java中int和String的相互转换常用的几种方法: int > String int i=10;String s="";第一种方法:s=i+""; ...
- Spring Boot 数据库连接池 HikariCP
简介 HikariCP 来源于日语,「光」的意思,意味着它很快!可靠的数据源,spring boot2.0 已经将 HikariCP 做为了默认的数据源链接池. 官网详细地说明了HikariCP所做的 ...