人工智能学习第4天_Python学习_字典、序列、集合、条件控制语句、
1. 创建字典字典({}、dict{}、zip()、fromkeys())
① 通过{}、dict()
>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> b = dict(name='gaoqi',age=18,job='programmer')
>>> a = dict([("name","gaoqi"),("age",18)])
>>> c = {} #空的字典对象
>>> d = dict() #空的字典对象
② 通过zip()创建字典对象
>>> k = ['name','age','job']
>>> v = ['gaoqi',18,'techer']
>>> d = dict(zip(k,v))
>>> d
{'name': 'gaoqi', 'age': 18, 'job': 'techer'}
③ 通过fromkeys 创建值为空的字典
>>> a = dict.fromkeys(['name','age','job'])
>>> a
{'name': None, 'age': None, 'job': None}
2. 字典元素的访问([]、get()、items、keys、values、in)
① 通过[键] 获得“值”。若键不存在,则抛出异常。
>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> a['name']
'gaoqi'
>>> a['sex']
Traceback (most recent call last):
File "<pyshell#374>", line 1, in <module>
a['sex']
KeyError: 'sex'
② 通过get()方法获得“值”。推荐使用。优点是:指定键不存在,返回None
>>> a.get('name')
'gaoqi'
>>> a.get('sex')
>>> a.get('sex','一个男人')
'一个男人'
③ 列出所有的键值对
>>> a.items()
dict_items([('name', 'gaoqi'), ('age', 18), ('job', 'programmer')])
④ 列出所有的键,列出所有的值
>>> a.keys()
dict_keys(['name', 'age', 'job'])
>>> a.values()
dict_values(['gaoqi', 18, 'programmer'])
⑤ len() 键值对的个数
⑥ 检测一个“键”是否在字典中
>>> a = {"name":"gaoqi","age":18}
>>> "name" in a
True
3.字典元素的增加、修改、删除(update()、del()、clear()、pop()、popitem())
① 给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,
则新增“键值对”。
>>>a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> a['address']='西三旗1 号院'
>>> a['age']=16
>>> a
{'name': 'gaoqi', 'age': 16, 'job': 'programmer', 'address': '西三旗1 号院'}
② 使用update()将新字典中所有键值对全部添加到旧字典对象上。如果key 有重复,则直
接覆盖。
>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> b = {'name':'gaoxixi','money':1000,'sex':'男的'}
>>> a.update(b)
>>> a
{'name': 'gaoxixi', 'age': 18, 'job': 'programmer', 'money': 1000, 'sex': '男的'}
③ 字典中元素的删除,可以使用del()方法;或者clear()删除所有键值对;pop()删除指定
键值对,并返回对应的“值对象”;
>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> del(a['name'])
>>> a
{'age': 18, 'job': 'programmer'}
>>> b = a.pop('age')
>>> b
18
④ popitem() :随机删除和返回该键值对。字典是“无序可变序列”,因此没有第一个元
素、最后一个元素的概念;popitem 弹出随机的项,因为字典并没有"最后的元素"或者其
他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效(因为不用首先获取键的列表)。
>>> a = {'name':'gaoqi','age':18,'job':'programmer'}
>>> a.popitem()
('job', 'programmer')
>>> a
{'name': 'gaoqi', 'age': 18}
>>> a.popitem()
('age', 18)
>>> a
{'name': 'gaoqi'}
4. 序列解包:items()、values()
5. 表格数据使用字典和列表存储,并实现访问 : tb = [r1,r2,r3]
6. 字典核心底层原理(重要)
① 将一个键值对放进字典的底层过程,接近2/3 时,数组就会扩容。
>>> a = {}
>>>
a["name"]="gaoqi"
>>> bin(hash("name"))
'-0b1010111101001110110101100100101
② 根据键查找“键值对”的底层过程
>>> a.get("name")
'gaoqi'
>>> bin(hash("name"))
'-0b1010111101001110110101100100101
③ 用法总结:
1. 键必须可散列
(1) 数字、字符串、元组,都是可散列的。
(2) 自定义对象需要支持下面三点:
①支持hash()函数
② 支持通过__eq__()方法检测相等性。
③若a==b 为真,则hash(a)==hash(b)也为真。
2. 字典在内存中开销巨大,典型的空间换时间。
3. 键查询速度很快
4. 往字典里面添加新建可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字
典的同时进行字典的修改。
7. 集合:集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典中的“键对象”,因此是不能重复的且唯一的。
① 集合创建和删除:使用{}创建集合对象,并使用add()方法添加元素
>>> a = {3,5,7}
>>> a
{3, 5, 7}
>>> a.add(9)
>>> a
{9, 3, 5, 7}
② 使用set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则只保留一个。
>>> a = ['a','b','c','b']
>>> b = set(a)
>>> b
{'b', 'a', 'c'}
③ remove()删除指定元素;clear()清空整个集合
>>> a = {10,20,30,40,50}
>>> a.remove(20)
>>> a
{40,10, 50, 30}
>>> a.clear()
>>> a
set()
④ 集合相关操作:a|b、a&b、a-b、a.union(b)、a.intersection(b)、a.difference(b)
8. 控制语句 : ·条件表达式中,不能有赋值操作符“=”
① 单分支控制语句
if 语句单分支结构的语法形式如下:
if 条件表达式:
语句/语句块
num = input("输入一个数字:")
if int(num)<10:
print(num)
② 双分支控制语句
双分支结构的语法格式如下:
if 条件表达式:
语句1/语句块1
else:
语句2/语句块2
num = input("输入一个数字:")
if int(num)<10:
print(num)
else:
print("数字太大")
③ 三元条件运算符: 条件为真时的值 if (条件表达式) else 条件为假时的值
num = input("请输入一个数字")
print( num if int(num)<10 else "数字太大")
④ 多分支选择结构
多分支选择结构的语法格式如下:
if 条件表达式1 :
语句1/语句块1
elif 条件表达式2:
语句2/语句块2
.
.
.
elif 条件表达式n :
语句n/语句块n
[else:
语句n+1/语句块n+1
]
⑤ 选择结构嵌套
语法格式如下:
if 表达式1:
语句块1
if 表达式2:
语句块2
else:
语句块3
else:
if 表达式4:
语句块4
9. 循环结构:while循环