九.Python递归汉诺塔和字典+集合

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


递归汉诺塔

>>> def hanNuoTa(n,a,b,c):
	if n==1:
		print(a,"-->",c)
	else:
		hanNuoTa(n-1,a,c,b)#前n-1个盘子从柱子1移动到柱子2
		print(a,"-->",c)#最下面的盘子都到第三个上
		hanNuoTa(n-1,b,a,c)#将前n-1个盘子从柱子2移动到柱子3

		
>>> hanNuoTa(3,1,2,3)
1 --> 3
1 --> 2
3 --> 2
1 --> 3
2 --> 1
2 --> 3
1 --> 3
>>> 

一、什么是字典

字典是一种可变容器模型,且可存储任意类型对象。是映射类型

字典的每个键值 key=>value 对用冒号 ‘: ’分割,每个对之间用逗号‘,’分割,整个字典包括在花括号 {} 中 ,格式如下所示:

d = {key1 : value1, key2 : value2, key3 : value3 }

键是唯一的,值不必唯一

>>> dict1={'a': 'hhh','b': 'www','c': 'wqqw'}
>>> dict2={}
>>> 

二、字典基操

类似于C语言数组操作,区别在[]内为要操作的键

1.读取字典

字典内有该值

>>> dict1={'英文':70,'数学':90,'语文':99}
>>> print(dict1)
{'英文': 70, '数学': 90, '语文': 99}
>>> print(dict1['数学'])
90
>>> 

字典内无该值

>>> print(dict1['数'])
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    print(dict1['数'])
KeyError: '数'
>>> 

2.修改数据

改变原有值

>>> dict1['数学']=10
>>> print(dict1['数学'])
10
>>> 

添加新值:直接添加新值,比C语言简单

>>> dict1['Pyhon']=80
>>> print(dict1)
{'英文': 70, '数学': 10, '语文': 99, 'Pyhon': 80}
>>> 

 3.删除数据

del 字典元素

>>> del dict1['Pyhon']
>>> print(dict1)
{'英文': 70, '数学': 10, '语文': 99}
>>> del dict1
>>> print(dict1)
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    print(dict1)
NameError: name 'dict1' is not defined
>>> 

4.字典键的特性

字典值:可为任意值

键: (1)必须为不可变的值,数字,字符串,元组,不能为列表

        (2)同一个键不允许出现俩次,如果创建时同一个键被赋值俩次,后一个键会被记住

>>> dict1={'英文':70,'数学':90,'语文':99,'英文':80}
>>> print(dict1)
{'英文': 80, '数学': 90, '语文': 99}
>>> 

 4.字典键的BIF和函数

len(字典名)        计算键数

str(字典名)        以字符串输出字典

>>> len(dict1)
3
>>> dict1.get('数学')
90
>>> 

type(变量名)        返回变量类型

a={}.fromkeys((key1,key2),value) >>>{key1:value,key2:value}:创建一个新字典,以序列(列表,元组,字符串)seq中元素做字典的键,val为字典所有键对应的初始值

>>> dict2={}
>>> dict2.fromkeys(('key1','key2'),'value')
{'key1': 'value', 'key2': 'value'}
>>>
——————————————————————————————————————————————————————————————————————————————
>>> value=('q', 'w', 'e', 'r', 't')#元组版
>>> key2=(0,9,8,7,5)
>>> dict2.fromkeys(key2,value)
{0: ('q', 'w', 'e', 'r', 't'), 9: ('q', 'w', 'e', 'r', 't'), 8: ('q', 'w', 'e', 'r', 't'), 7: ('q', 'w', 'e', 'r', 't'), 5: ('q', 'w', 'e', 'r', 't')}
>>> #感觉这个函数很傻,一般用于字典初始化


>>> key2=[0,9,8,7,5]#序列版
>>> dict2.fromkeys(key2,value)
{0: ('q', 'w', 'e', 'r', 't'), 9: ('q', 'w', 'e', 'r', 't'), 8: ('q', 'w', 'e', 'r', 't'), 7: ('q', 'w', 'e', 'r', 't'), 5: ('q', 'w', 'e', 'r', 't')}


>>> key2='123456'#字符串版
>>> dict2.fromkeys(key2,value)
{'1': ('q', 'w', 'e', 'r', 't'), '2': ('q', 'w', 'e', 'r', 't'), '3': ('q', 'w', 'e', 'r', 't'), '4': ('q', 'w', 'e', 'r', 't'), '5': ('q', 'w', 'e', 'r', 't'), '6': ('q', 'w', 'e', 'r', 't')}
>>> 
______________________________________________________________________________

keyind

检查字典d中是否含键key的项

.copy()

将原来的内容再复制一份,返回新的字典

import copy        copy.deepcopy()

深拷贝

.clear()

清空

.get(k[,d])

k在字典中返回其值,不在返回d

.setdefault(k[,d])

k在字典中返回其值,不在创建k:d键值对,不填d默认None

.items()

得到关于字典键和值组成元组的列表

.iteritems()

得到同上内容的迭代器,必须用list转换才能看

.keys()和.iterkeys()

得到字典所有键的列表

.values()和.itervalues()

得到字典值的列表

.pop(k[,d])

删除参数的键值对,没有报错。如果参数两个,先检查k有则返回其值,没有返回d

.popitem()

可以不写参数,从字典中移除并返回一个 (键, 值) 对。 键值对会按 LIFO(先进后出) 的顺序被返回。。空的时候再删报错

.update(要添加的元素)

将字典或元素里各元素更新加入到字典中

.has_key(k)

判断键k在字典中

        

集合(sit)

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

>>> a=[1,3,3,5,6,3,2,8]
>>> set(a)
{1, 2, 3, 5, 6, 8}
>>> 

集合内元素具有唯一性,利用这点可以抛出重复值,但转换为集合后的变量会被自动排序,

>>> a
[1, 3, 3, 5, 6, 3, 2, 8]
>>> b=set(a)
>>> b
{1, 2, 3, 5, 6, 8}
>>> list(b)
[1, 2, 3, 5, 6, 8]
>>> 
方法描述
add()为集合添加元素
clear()移除集合中的所有元素
copy()拷贝一个集合
difference()返回多个集合的差集
difference_update()移除集合中的元素,该元素在指定的集合也存在。
discard()删除集合中指定的元素
intersection()返回集合的交集
intersection_update()返回集合的交集。
isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset()判断指定集合是否为该方法参数集合的子集。
issuperset()判断该方法的参数集合是否为指定集合的子集
pop()随机移除元素
remove()移除指定元素
symmetric_difference()返回两个集合中不重复的元素集合。
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
union()返回两个集合的并集
update()给集合添加元素


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值