博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数__内置函数(reversed,slice,format,ord,chr,ascii,repr)递归,迭代,二分法
阅读量:5136 次
发布时间:2019-06-13

本文共 4993 字,大约阅读时间需要 16 分钟。

 

一.内置函数.

1)reversed()  反转.返回值是个迭代器,打出来需要用list()一下

huiwen = "不是上海自来水来自海上"s = huiwen[::-1]it = reversed(huiwen) # 返回的是迭代器s = ""for el in it:  #这样使用拼接的方法,打出来就是一个字符串了.好看    s += elprint(s)输出结果为:上海自来水来自海上是不第二种.是迭代打出来的,不咋好看huiwen = "不是上海自来水来自海上"s = huiwen[::-1]it = reversed(huiwen) # 返回的是迭代器print(list(s))输出结果为:['上', '海', '自', '来', '水', '来', '自', '海', '上', '是', '不']

 

2)slice()  切片,不常用

 

lst = ["河南话", "四川话", "东北", "山东", "上海"]s = slice(3,5) # 切片. 麻烦print(lst[s])输出结果:['山东', '上海']

 

3)format()  格式化输出.该函数可不限参数个数,位置可以不按顺序.

 

语法:"{}{}".format("参数1","参数2") "{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序输出结果为:'hello world'"{0} {1}".format("hello", "world")  # 设置指定位置输出结果为:'hello world'"{1} {0} {1}".format("hello", "world")  # 设置指定位置输出结果为:'world hello world'

 

3.1)format() 数字格式化,不常用

 

print(format("门神", "^20"))  #长度20,居中print(format("门神", "<20"))    #长度20,居左print(format("门神", ">20"))    #长度20,居右

 

3.2)format()  浮点数

 

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'))   # 小数点计数法.保留了原数字小数点后两位,这个比较好用 print(format(1.23456789, '0.10f'))   # 小数点计数法. 保留10位小数  print(format(1.23456789e+10000, 'F'))   # 小数点计数法 输出结果为:

1.234568e+08

1.23e+08  #此处的"08"意思是1.23被缩小了10**8,e表示科学记数法
1.23E+08 
1.234568
1.23  #保留了原来数字的小数点后两位,这个比较好用,直接,明显.
1.2345678900
INF  #超界限了,打印不出来,就显示该数为无限

 

 

4)ord()  拿字找位置(索引值),返回的是该字符在编码的位置.对应的是unicode码

  chr()  拿数找字,返回的是该数在码里面的字,对应的是unicode码,中国字65536个数字位置

5)ascii()  判断是否在ascii码里,在就打印出该参数在ascii里的码区码位.

 

print(ascii("饕髢"))输出结果为:'\u9955\u9ae2'

 

6)repr()  将字符串还原为底层C语言认识的合理语法.(python是C语言写的)

 

\n 换行\t tab 制表符\r 回车\"   双引号\'  单引号\\    \转义

 

print('你好, 我叫周杰伦.我来自\\n台湾. 我老婆叫昆凌')repr() # 还原字符串最官方的效果print(repr("你好. \\n我叫\周杰伦"))  # python接收到内容  交给  repr()翻译,之后交给 cpython,处理完之后才能显示出来题外话:如何原封不动的显示字符串内容,就在这个字符串前面加个rprint(r"\n\t范德萨发生\r\b\ffdsaf")  # 原封不动的显示字符串 name = "xiaoli" print(f"我叫{name},我来自地球")  #这里的f是格式化输出的意思,如果是fr就是就是两者的混合体 打印结果: 我叫xiaoli,我来自地球

二.递归.

函数自己调用自己

def func():    print("我是递归")    func()func()   # 递归,官方显示最大为1000次,你永远跑不到1000, 我实测998

 下面介绍下用函数递归打印出所有的文间目录

def func(lujing, n): # "d:/a/"    lst = os.listdir(lujing) # 打开文件夹. 列出该文件夹内的所有文件名, 返回指定的文件夹包含的文件或文件夹的名字的列表,此列表以字母排序    for el in lst: # el是文件的名字.  b, c        # 还原文件路径        path = os.path.join(lujing, el) # "d:/a/b"   把目录和文件名合成一个路径,说白了,就是做拼接的,给出绝对路径        if os.path.isdir(path): # 判断路径是否是文件夹            print("..." * n,el) # 显示文件夹的名字            func(path, n + 1)  # 在来一次  ################        else:            print("\t" * n,el) # 显示文件func("d:/a", 0)

 

新词解析:

os.path  模块主要用于获取文件的属性。os.listdir()  方法用于返回指定的文件夹包含的文件或文件夹的名字的列表,此列表以字母排序,它不包括 '.' 和'..' 即使它在文件夹中。os.path.join()  #把目录和文件名合成一个路径,说白了,就是做拼接的,给出绝对路径os.path.isdir(path)    判断路径是否为目录(就是文件夹),需提供绝对路径os.path.isfile(path)    判断路径是否为文件(文件是某种执行格式),需提供绝对路径目录文件”指的是某些“文件”,“目录”只是定义这些文件存放的位置。文件是有具体内容或用途的,通常电脑有多种不同功用的文件,有可执行文件,数据文件,类或库文件,文本文件,图像文件等等

 os.path.join()方法.创建以用户名为txt文件名的例子

import os例子1:dirs = "C:\\register作业" #根目录文件夹名字if not os.path.exists(dirs): #如果改目录下not(没有此文件夹),就可以执行这个if    os.makedirs(dirs)  #创建文件夹例子2:lst = os.listdir(dirs)#把此目录下的所有文件或文件夹名字放进一个列表    dirs = "C:\\register作业"   #此处为根目录     tiwen2=input("输入注册账号:")    name=tiwen2+".txt"  #以用户名为文件的名字,进行拼接    name1 = os.path.join(dirs,name)  #拼接出绝对目径    f = open(name1,mode="a",encoding="utf-8")  #创建指定目录下的文件,且文件名为用户输入的账户    f.write(tiwen3)  #写入用户输入的密码.    f.close()    return

 

 

三、二分法.

 特点:掐头去尾取中间,查找效率很高,但是局限性比较大,必须是有序序列才可以用此方法

二分法查找 (需要你明白和掌握)lst = [1,3,5,7,12,36,68,79]n = int(input("请输入一个数"))left = 0right = len(lst) - 1while left <= right:    mid = (left + right)//2    if n > lst[mid]:        left = mid + 1    elif n < lst[mid]:        right = mid - 1    else:        print("存在")        breakelse:    print("不存在")

第二种(需要理解掌握)

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) # 递归如果有返回值. 所有调用递归的地方必须写return        else:            print("找到了")            return mid  # 难点    else:        print("找不到")        return -1

第三种(了解下即可)

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("没找到")        returnn = int(input("请输入你要查找的数:"))func(n, [1,3,5,7,12,36,68,79]) # 78

 

最快的查找(了解即可)  此方法最节省空间和时间的.先创建一个最大值的列表,全部为0,把存在的数据当作这个列表的下标,把对应的小标改成1,最后,用户查找的时候,以输入的值为这个列表的下标,如果该下标对应的值为1,说明存在,否则不存在

lst = [1,3,55,98,37,41,2,5,1,4]new_lst = []for i in range(99):    new_lst.append(0)for i in lst:    new_lst[i] = 1print(new_lst)i = int(input("输入你要找的数据:"))if new_lst[i]==0:    print("不存在")else:    print("存在")

 

转载于:https://www.cnblogs.com/lgw1171435560/p/10116928.html

你可能感兴趣的文章
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
企业级应用与互联网应用的区别
查看>>
itext jsp页面打印
查看>>
Perl正则表达式匹配
查看>>
DB Change
查看>>
nginx --rhel6.5
查看>>
Eclipse Python插件 PyDev
查看>>
selenium+python3模拟键盘实现粘贴、复制
查看>>
第一篇博客
查看>>
网站搭建(一)
查看>>
SDWebImage源码解读之SDWebImageDownloaderOperation
查看>>
elastaticsearch
查看>>
postgreSQL 简单命令操作
查看>>
Spring JDBCTemplate
查看>>
Radon变换——MATLAB
查看>>
Iroha and a Grid AtCoder - 1974(思维水题)
查看>>
gzip
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>