python3与数据结构与算法描述

本文介绍了Python3中的数据结构和算法应用,包括变量赋值、列表操作、条件判断、循环语句、字符串比较、数据排序、字典操作以及递归和函数等。通过实例展示了如何在Python中实现各种常见的数据结构和算法,如交换变量值、列表排序、字符串比较、字典的嵌套和查找等。此外,还讨论了作用域、参数传递、函数定义以及异常处理等方面的知识。
摘要由CSDN通过智能技术生成

# #class resultPdt(object):
# #def getResult(id,opr):
# print ('a =',5)
# x,y,z = 1,2,3
# print(x,y,z)
# x,y,z = y,z,x
# print(x,y,z)
# #a,b,rest* = [1,2,3,4] 
//python3
#

# x = c()
# y = c()
#
# x = y
# y = c()
#
# a = 'b'
# a *= 2
# print(a)
# num = input('number?\n')
# if (num == 1):
#     print ("==")
# else: print("!=")
# x=1
# y=1
# if x <= y <= z:
#     print(1)
# if(x is not y):  #
理论上根据判断对象原则;即使x和y值相等,也不该是同一个对象啊;
#     print (2)
#
# x = [1,2,3]
# y = [2,4]
# print(x is not y)
# del x[2]
# y[0] = 1
# y.reverse()
# for i in x:
#     print (i)
# print(x is y)

# x = [1]
# y = [1]     #地址不同
# print(x is not y)  #true
# #实践证明,为列表时,是不同对象
# x = 1
# y = 1
# print(x is not y)  #false 为值时为相同对象
#
# x = 2
# y = 1
# print ('第二次',x is not y) #true
# x = 1
# print (x is not y)         #false    地址相同,文档提示使用is比较值和字符串不可取
# #因为python内部操作该字符串的方式不可控导致结果不可预测;那么内部操作方式又是什么?
#
# print("abc"<"aba") #按位进行字母排列顺序比较
# print(ord("a"),ord("A"),chr(54),"adFdCSEf".upper(),"adFdCSEf".upper().lower())
#
# print ([2,{1,3},4]<[2,{1,3},5])   #花括号究竟是啥玩意啊;集合set
# print ([2,[1,3],4]<[2,[1,3],5])
#
# name = input('input name')or "random"     #随机名称生成;
# print (name)
#
# b = 3
# print (5 if b == 5 else 1) #b在未定义时为不可预测态,时无法比较;
#
# # 断言机制:先验
# age = -1
# assert 1<age<19  #用于检查函数和变量;不满足条件直接从这里中断掉
#
# name = ''
# while not name or name.isspace():
#     name = input ("inputname?:")   #or "unknown"
# print ("欢迎%s!"%name)   #%s打印消除空格    #注意:依赖于缩进识别语句快;
# print ("欢迎!",name)
#
# s = 0
# for a in range(10):
#    s += a
# print ("%d"%s)   #循环语句块外
#
# s = 0
# for a in range(10):    #range(10) =[0,1,2,3,4,5,6,7,8,9]  集合
#     s += a
#     print ("%d"%s) #循环语句块内,直至找到缩进为止;   #xrange用法
#
# d = {'a':1,'b':2,"c":3}  #字典   python单引号和双引号是否有区别?
# for key in d:
#     print (key,':',d[key])
# print (key)
# print (d[key])

# print('a','b','c','d',123)
#
# 并行迭代
# name = ['a','b','c','d']
# for i in name:
#     print(i)
# sex = [0,0,1,1,0,1]
#
# for i in range(len(name)):
#     print (name[i],': %d'%sex[i])      #分片
# # 下方需要继续探讨修改为 for a in zip(name,sex)时,输出存疑结果的原因
# print("内建函数:")
# zip(name,sex) #压缩多个序列为一个
# for a,b in zip(name,sex):
#     print(a,b)
# #
# for a,b in zip(range(5),range(5)):  #python 3.0中,xrange究竟被替换成了什么
#     print(a,b)
# #编号迭代
# name = ['a','b','c','d']
# for i in range(len(name)):    #创建游标或者索引i
#     if name[i] == 'c':
#        name[i] = "e"
# for i in name:          #此处i为集合或列表中的元素
#     print(i)
#
# name = ['a','b','c','d']
# for i in name:
#     if 'c' in i:
#         idx = name.index(i)    #取得含有对应元素的索引
#         name[idx] = 'e'
# for i in name:
#     print(i)
#
# name = ['a','b','c','d']
# idx = 0
# for i in name:
#     if "c" in i:
#         name[idx] = 'e'
#     idx += 1             #
# for i in name:
#     print(i)
# 内建函数迭代
# name = ['a','b','c','d']
# for index,n in enumerate(name):  #enumerate列举出键值对;
#     if 'c' in n:
#         name[index] ='e'
# for i in name:
#     print (i)
#
#
# name = ['e','a','b','c','d']
# s = "+"  #
# name = sorted(name)      #返回列表
# name = list(reversed(name))     #返回对象地址
# name = s.join(reversed(name))   #遍历列表,将s加入序列
# print(name)
#
# for while 循环中的break,continue,else语句
# from math import sqrt
# for n in range(99,81,-1):
#     x = sqrt(n)           #开方后结果默认为浮点数;
#     if x == int(x):
#         print (int(x))
#         break
# else: print('not find')
# while True:
#     temp = input('input value:')
#     if temp.isspace():
#         continue
#     if not temp:
#         break
#     print
#
# list = [x*x for x in range(5) if x%3 == 0]
# print(list)
#
# list = [(a,b)for a in range(10)for b in range(10)]
# print(list)
#
# a = tuple()
# b = (0,1,2)
# print(a,b)

# result = []
# for x in range(3):
#     for y in range(3):
#         result.append((x,y))
# print(result)
#
# #字典序
# girls = ['ali','ber','cla']
# boys = ['chr','arn','bob']
# letterGirls = {}
# for i in girls:
#     letterGirls.setdefault(i[0],[]).append(i)
# print([(b,g) for b in boys for g in letterGirls[b[0]]])
# #以男孩名首字母为索引,在创建的字典中中查找对应值
#
# pass
# def a():
# x = 1
# del x
# ##print(x)  #移除对象名以及对象引用
#
# exec
# from math import sqrt    #本段运行不成功,并且对于 scope['sqrt']存疑,因为
# # 并不是将语句字符串写入命名空间,而是仅仅将sqrt;但代码在sqrt报错
# scope = {}
# exec ("sqrt = 1") in scope
# sqrt(4)
# scope['sqrt']
# scope.keys()
#
# eval
# eval用于求值
# eval(input("evalue:")) #未能计算出结果
#
# scope = {}
# scope['x'] = 2
# scope['y'] = 3
# eval('x*y',scope)   #运行有问题,不明觉厉
#
# scope = {}
# exec ('x=2' in scope)
# eval('x*x',scope)   #运行有问题,不明觉厉
#
# fibs = [0,1]
# for i in range(8):
#     fibs.append(fibs[-2] + fibs[-1])
# print(fibs)
#
# def fibs(num):
#     '计算菲薄纳妾数列'   #该函数说明语句不同于注释,它是作为函数的一部分与之一起存储的;
#     fibs = [0,1]
#     for i in range(num-2):
#         fibs.append(fibs[-2] +fibs[-1])
#     print(fibs)   #没有给返回值时,会返回none
#     return fibs   #递归程序的运行时间较长,和C相比可见python的速度;
#
# fibs(64)
# print(fibs.__doc__)   #返回函数说明语句
# help(fibs)   #打印函数相关信息
#
# def change(n):
#     n[0] = 1
#     return print(n)
# p = [0,1]
# change(p)
# print (p)
#
# 以下两块展示了列表复制与多个指向的区别
# n = [0,1]
# x = n
# print(n is x)
# print(n == x)
#
# x = n[:]   #以切片形式得到列表副本
# print(n is x)
# print(n == x)

# 字典的嵌套,下面这段不是很明确;
#
# def init(data):
#     data['first'] = {}
#     data['middle'] = {}
#     data['last'] = {}
#     return print(data)
# temp = {}
# init(temp)
#
# def lookup(data,label,name):
#     return data[label].get(name)
#
# def store(data,full_name):
#     names = full_name.split()
#     if len(names) == 2: names.insert(1,'')
#     labels = ['first','middle','last']
#     for label,name inzip(labels,names):
#         people =lookup(data,label,name)
#         if people:
#             people.append(full_name)
#         else:
#             data[label][name] = [full_name]
#
# 关键字参数和默认值
# def f1(name = 'unknown',greet = 'hi'):
#     print('%s,%s!'%(name,greet))
# f1('hello','12')
# #参数化赋值如下,可乱序
# f1(greet = '12',name = 'HELLO')
# f1()
# f1(name = 'lx')
# f1("s")  #如果只给出一个实参,那么本编译器默认匹配第一个形参,但不建议这么做,可能有其他问题
#
# 收集参数:收集其余位置
# def print_param(*params):
#     print (params)
# print_param(1,2,3)
# print_param("test")
#
# def print_param(title,*params):
#     print (title,params)
# print_param('params:',1,2,3)
# print_param('params:')   #不提供后续参数则为空元组
#
# 关键字
# def print_param(**params):
#     print (params)
# print_param(x=1,y=2)
#
# def print_param(x,y,z=3,*pospar,**key):
#     print(x,y,z)
#     print(pospar)
#     print(key)
# print_param(1,2,3,5,6,7,foo=1,bar=2)
#
# def store (data,*prm):
#     data.append(prm)
#     return print(data)
# a = []
# store(a,1,2,3,4)
#
# 反向;
# def add(a,b):
#     s = a+b
#     print(s)
# params = (1,2)
# add (*params)
#
# def star(**kwd):
#     print(kwd['name'],'is',kwd['age'],'old')
# def opstar(kwd):
#     print (kwd['name'],'is',kwd['age'],'old')
# args = {'name':'Mr.Gumby','age':42}
# star(**args)
# opstar(args)
# 拼接操作符传参也可以达到差不多效果;splicing? py3应该变了吧
#
# # 参数设置练习
# def story(**key):
#     return 'a''\%(job)s called%(name)s.'%key
#
# def power(x,y,*others):
#     if others:
#         print('other param:',others)
#     return print(pow(x,y))

# def interval(start,stop = None,step = 1):
#     'range() for step > 0'
#     if stop is None:
#         start,stop = 0,start
#     result = []
#     i = start
#     while i<stop:
#         result.append(i)
#         i += step
#     return print(result)
#
# print (story(job = 'lx',name = 'py'))
#
# params = {'job':'py','name':'lzk'}
# print (story(**params))
#
# del params['job']
# print (story(job = 'tec',**params))
#
# params = (5,)*2
# print('pay attention to the next')
# print(params)
# print(*params)
#
# power(*params)
#
# interval(10)
# interval(1,5)
# interval(3,12,4)
# interval(3,7)
#
# param = (3,4,5,6)
# param2 = [3,4,5,6]
# power(*param)
# power(*param2)

# 作用域
# def combine(param):
#     print(param+globals()['param'])
# param = 'cell'
# combine('shr')
# # globals()用于获取全局变量的值
#
# 重定向全局变量:·
# x = 15
# def chgglobal():
#     global y
#     y = 25
#     y += x
#     print(x,y)
# chgglobal()
# print(x)     #结果为2
# # global y
# print(y)
# 递归
# def fac(n):
#     if n == 1:
#         return 1
#     else:
#         return n*fac(n-1)
# print (fac(10))
#
# #顺序序列二分查找算法
# def search(seq,number,up,low):
#     if up == low:
#         assert number == seq[up]
#         return up
#     else:
#         middle = (low+up)//2
#         if number>seq[middle]:
#             returnsearch(seq,number,up,middle+1)
#         else:returnsearch(seq,number,middle,low)
# seq = [54,23,1,5,9,4]
# seq.sort()
# print(seq)
# print(search(seq,9,up = len(seq)-1,low = 0))
#
# map(str,range(10))  #搞不懂什么玩意
#
# def func(x):
#     return x.isalnum()
#
# seq = ['foo','x4l','?!','**']
# filter(func,seq)   #没输出,版本问题,不管了
# seq = ['foo','x4l','?!','**']
# [x for x in seq if x.isalnum()]
#
# seq = ['foo','x4l','?!','**']
# filter(lambda x:x.isalnum(),seq)  #不知道如何输出
#
# num = [1,3,5,3,2,3,33,4]
# reduce(lambda x,y:x+y,num)   #以上函数(另外还有apply函数)
# 3.0以上版本已经不再支持,转移到functools模块中
#
# def add(x,y):
#     return x+y
# print(add(0,1))
# pr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值