1.部分内置函数
repr()显示出字符串的官方表示形式,返回一个对象的string形式
# repr 就是原封不动的输出, 引号和转义字符都不起作用
print(repr('大家好,\n \t我叫周杰伦'))
print('大家好我叫周杰伦')
# %r 原封不动的写出来
name = 'taibai'
print('我叫%r' % name)
前面用r来原封不动的写出来
print(r'我叫\n\t,,,') # 我叫\n\t,,,
chr() 输入位置数字找出对应的字符
# 找到对应编码位置的字符
print(chr(97)) # a
print(chr(20013)) # 中
ascii() 是ascii码就返回该值,不是就返回/u
# 在ascii中就返回这个值. 如果不不在就返回\u...
print(ascii('a')) # 'a'
print(ascii('好')) # '\u597d'
ord() 输入字符找带字符编码的位置
# 找到对应字符的编码位置
print(ord('a')) # 97
print(ord('中')) # 20013
2.递归
在函数中调用函数本身.就是递归
def func():
print("我是谁")
func()
func()
在python中递归的深度最大到998,
官方给的深度是1000,我在pycharm中测试是998,mac环境下997
在python中递归的深度最大到998
def foo(n):
print(n)
n += 1
foo(n)
foo(1) # 998结束
遍历显示文件夹中所有文件
方式1.使用递归来遍历文件夹中所有文件
import os
def func(lujing,n): # "d:\a\" 定义这个函数 参数为路径,n用来显示子文件夹更清晰
lst = os.listdir(lujing) # 获取路径下的文件夹列表
for el in lst: # 遍历这个列表,这里获取的只是本层文件名 b, c
path = os.path.join(lujing,el) # 加入文件夹 获取到文件夹 +文件
if os.path.isdir(path): # "d:/a/b" 如果该路径下的文件是文件夹类型
print('\t'*n,el)
func(path,n+1) # 继续相同的操作,这里使用递归
else:
print('\t'*n,el)
func('D:\a',0)
方式2.
import os
for path,dirss,files in os.walk('c:\users\'):
for file in files:
print(os.path.join(path,file))
3.二分查找
二分查找,每次能够排除掉一半的数据,查找的效率非常高,但是局限性比较大,必须是有序序列才可以使用二分查找
要求:查找的序列必须是有序序列
使用while循环的二分法
lst = [1,3,5,7,12,36,68,79] # 数据集 百万级数据
num = int(input("请输入你要查找的元素信息:"))
left = 0
right = len(lst)-1
while left<=right:
mid = (left + right) // 2
if num>lst[mid]:
left = mid +1
elif num<lst[mid]:
right = mid - 1
else:
print('存在')
print(mid)
break
else:
print('不存在')
使用递归的二分法
lst = [1,3,5,7,12,36,68,79] # 数据集 百万级数据
num = int(input("请输入你要查找的元素信息:"))
def func(num,left,right):
if left < right:
mid = (left+right)//2
if num >lst[mid]:
left = mid+1
elif num < lst[mid]:
right=mid-1
else:
print('存在')
return mid
return func(num,left,right) # 这个return必须要加否则永远返回none
else:
print('找不到')
return -1 # 这里用返回-1
a = func(num,0,len(lst)-1)
print(a)
用递归和列表切片的二分法
lst = [1,3,5,7,12,36,68,79] # 数据集 百万级数据
num = int(input("请输入你要查找的元素信息:"))
def func(num,lst):
left = 0
right = len(lst)-1
if lst != []:
mid = (left+right)//2
if num > lst[mid]:
func(num,lst[mid+1:])
elif num < lst[mid]:
func(num,lst[:mid])
else:
print('找到了')
return
else:
print('没找到')
return
func(num,lst)
一种极为快速的查找方式,我在小学生编程书上看到过的
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] = 1
i = int(input('请输入你要找的数据'))
if new_lst[i] == 0:
print('不存在')
else:
print('存在')