一 内置函数
1. revserd 翻转, 返回的是迭代器
- # 将 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.formate
- # 格式化输出
- 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="")
二. 递归
函数自己调用自己, 递归的入口 (参数) 和 出口 (return)
语法:
- 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'123456')
- 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('存在')
来源: http://www.bubuko.com/infodetail-2883330.html