Python 入门记录三

仅为记录自学python时的笔记。

目录

#递归

#字典 key-value python中唯一的映射类型

#set 集合,特点:唯一,不支持索引


#----------------------------------------------------------------------------

#递归

#1:函数调用自身
#2:有正确的终止条件

#python3默认递归最大深度为100层,可以自己修改
'''
import sys
sys.setrecursionlimit(num) #num层

'''
#经典汉诺塔
'''
def hanoi(n,x,y,z):
    if n==1:
        print(x,'->',z)
    else:
        hanoi(n-1,x,z,y)#前n-1个从x移到y上以z为辅助
        print(x,'->',z)#最后一个x移到z
        hanoi(n-1,y,x,z)#前n-1个从y移到z以x为辅助

'''
#-------------------------------------------------------------

#字典 key-value python中唯一的映射类型

#对于 Python 来说,键必须是可哈希的,换句话说就是要可以通过散列函数计算出唯一地址的
#变量、列表、字典、集合这些都是可变的,所以都不能做为键(Key)来使用。
#创建和访问字典 使用大括号
#序列中若给一个不存在的位置赋值时会保存,字典不会保存,会自动添加
#1:dict1 = {'key1':'value1', 'key2':'value2'}
#2:dict2 = dict((('f',70),('i',105),('s',115),('h',104)))
#注意小括号数量:最内和中间改为中括号也可以,代表用序列存储转化为字典
#dict2 = {'f': 70, 'i': 105, 's': 115, 'h': 104}
#3:dict3 = dict(fish='666', fish2='7777')//key只能为字符串,且无引号
#dict3 = {'fish':'666', 'fish2':'7777'}
#4:dict4['fish'] = '食物' 若字典中存在该键则替代,否则创建
#5:dict5 = dict(zip([key1,key2],[value1,value2]))
#6:dict1['key1'],dict1['key2'] = 'value1','value2'//批量赋值
#字典内置BIF:
#--fromkeys(S[,v])->New dict with keys form S and values equal to v(defuats to None)
#--调用BIF的字典不改变,在BIF的返回值体现改变
#----d1.fromkeys((1,2,3)):  {1: None, 2: None, 3: None}
#----该创建只可指定一个值,即所有键的值相同(第二个参数),例:
#----d1.fromkeys((1,2),('v1','v2')):  {1: ('v1', 'v2'), 2: ('v1', 'v2')}
#--keys(): 返回一个序列:字典所有的键
#--values():返回一个序列:字典所有的值
#--items(): 返回一个序列:字典以元组的形式分割为一个序列
#--get(key):返回key对应的值,如无此键,返回None
#--clear():清空字典
#--使用 dic = {}会有隐患
,例:
'''
a = {'a':'b'}
b = a
a = {}

'''
#此时b并没有清空,因为执行a = {}代表一个创建的新的字典a为空,覆盖了旧的,并不代表旧的被清空
#--copy():浅拷贝

#--浅拷贝和赋值的区别:赋值后id()相同,两者都指向同一个对象。
#而浅拷贝不同(切片), a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)

#--pop(key):删除key,返回对应的value
#--popiteam():随机删除一对数据
#--setdefault(key[,v]):插入key:value,返回value(所以可以用作查询,若查不到则插入:value为None),value默认为None
#--update(dict):更新自己使参数dict成为自己的子集
#-----------------------------------------------------------------------------

#set 集合,特点:唯一,不支持索引

#set空集合不是{},这是字典空集合
#set1 = set():set空集合
#可以通过 in or not in 判断元素是否在集合中
#frozenset:不可变集合
#公用BIF:
#集合操作:集合s,集合t***********************
#--s.issbuset(t):s<=t 子集测试:s中所有元素均为t成员
#--s.issuperset(t):s>=t 超集测试,与上相反
#--s.union(t):s|t 合并操作
#--s.itersection:s&t 交集操作
#--s.difference:s-t 差分操作
#--s.symmetric_difference(t):s^t 对称差分操作(s|t not s&t)
#可变set的BIF:
#--s.update(t):s|=t 将t中元素添加到s中
#--s.intersection_update(t): s&=t 交集修改操作
#--s.difference_update(t):s-=t 差修改操作
#--s.sysmmetric_difference_update(t) s^=t 对称差分修改操作
#--add(v)添加元素
#--remove(v)删除元素:v不在集合中引发异常
#--discard(v)丢弃操作:v不在集合中返回None
#--s.pop():移除并返回s中任意元素
#--s.clear():清除操作
#这里set一定不要被表面给迷惑!!!!
'''
a = {1,6,2,4,9}
a = set(a)
print(a)
#接着
print(a.pop())
print(a)
#输出
{1, 2, 4, 6, 9}
1
{2, 4, 6, 9}

'''
#然后我们会想:set会自动排序么,并且pop()为第一个元素,但是python定义为set无序,pop()随机
'''
数目足够大时,为无序
import random
n = 1000
set1 = set()
while True:
    n-=1
    if n==0:
        break
    set1.add(random.randint(10,20000))

print(set1)
#此时set为无序

'''

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值