字典
-
字典是一个包含键值对的无序可变序列,字典中每个元素都是包含一个键对象和一个值对象。可以通过键对象实现快速获取、删除、更新值对象。注意键对象是任意任意不可变的数据,比如:整数、浮点数、字符串、元组等。但是:列表、字典、集合这些可以改变的对象不能作为键对象,并且键不可重复。
-
字典的创建:
-
{}直接可以创建空的字典对象
-
>>> a = {} >>> type(a) <class 'dict'>
-
-
dict()内置函数
-
>>> b = dict(name='gaoqi',age=18,job='programmer') >>> a = dict([("name","gaoqi"),("age",18)]) >>> type(a) <class 'dict'> >>> type(b) <class '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}
-
-
字典元素的访问
-
以键访值,若值不存在则抛出错误
-
>>> a = {'name':'gaoqi','age':18,'job':'programmer'} >>> a['name'] 'gaoqi' >>> a['age'] 18 >>> a['sex'] Traceback (most recent call last): File "<pyshell#374>", line 1, in <module> a['sex'] KeyError: 'sex'
-
-
以get方法获得值,优点是若键值不存在可以返回None或者设定指定键不存在时默认返回的对象。
-
>>> a = {'name':'gaoqi','age':18,'job':'programmer'} >>> a['name'] 'gaoqi' >>> print(a.get('sex')) None >>> a.get('sex','该值不存在') '该值不存在'
-
-
items()方法可以列出所有的键值对
-
>>> a = {'name':'gaoqi','age':18,'job':'programmer'} >>> a.items() dict_items([('name', 'gaoqi'), ('age', 18), ('job', 'programmer')])
-
-
keys()方法可以列出所有的键,values()可以列出所有的值
-
>>> a = {'name':'gaoqi','age':18,'job':'programmer'} >>> a.keys() dict_keys(['name', 'age', 'job']) >>> a.values() dict_values(['gaoqi', 18, 'programmer'])
-
-
成员操作符,检测键是否在字典中
-
>>> a = {"name":"gaoqi","age":18} >>> "name" in a True
-
-
-
-
字典元素添加、修改、删除
-
给字典新增“键值对”。如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在,则新增“键值对”
-
>>>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 >>> a.clear() >>> a {}
-
-
popitem() :随机删除和返回该键值对。
-
>>> a = {'name':'gaoqi','age':18,'job':'programmer'} >>> a.popitem() ('job', 'programmer') >>> a.popitem() ('age', 18) >>> a.popitem() ('name', 'gaoqi') >>> a.popitem() Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'popitem(): dictionary is empty'
-
-
-
序列解包:可以使用与元组、列表、字典
-
>>> x,y,z=(20,30,10) >>> x 20 >>> y 30 >>> z 10 >>> (a,b,c)=(9,8,10) >>> a 9 >>> [a,b,c]=[10,20,30] >>> a 10 >>> b 20
-
当序列解包用于字典是,默认只对键进行操作;如果要对键值操作,则需要使用items();如果需要对“值”进行操作,则需要使用values();
-
>>> s = {'name':'gaoqi','age':18,'job':'teacher'} >>> name,age,job=s #默认对键进行操作 >>> name 'name' >>> name,age,job=s.items() #对键值对进行操作 >>> name ('name', 'gaoqi') >>> name,age,job=s.values() #对值进行操作 >>> name 'gaoqi'
-
-
5. 集合
-
集合是元素无序、可变且不能重复的序列,集合的底层是字典实现的,集合的所有元素都是字典中的“键对象”,因此是不能重复且唯一的
-
集合的创建:
-
使用{}创建集合对象,并且使用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 {10, 50, 30}
-
-
-
集合的交集、并集、差集
-
>>> a = {1,3,'sxt'} >>> b = {'he','it','sxt'} >>> a|b #并集 {1, 3, 'sxt', 'he', 'it'} >>> a&b #交集 {'sxt'} >>> a-b #差集 {1, 3} >>> a.union(b) #并集 {1, 3, 'sxt', 'he', 'it'} >>> a.intersection(b) #交集 {'sxt'} >>> a.difference(b) #差集 {1, 3}
-
五、控制语句
1. 条件控制语句
-
单分支选择结构:
if 条件表达式:
语句/语句块
其中:
- 条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等
- 语句/语句块:可以是一条语句也可以是多条语句。多条语句缩进必须对齐一致
-
条件表达式详解:
- 在选择和循环结构中,条件表达式的值为False的情况如下,除了下述几种情况外条件表达式均为True。
- False、0、0.0、空值None、空序列对象、空range对象、空迭代对象
- 条件表达式中不能存在赋值操作,出现了则抛出异常
- 在选择和循环结构中,条件表达式的值为False的情况如下,除了下述几种情况外条件表达式均为True。
-
双分支结构:
if 条件表达式 :
语句 1/语句块 1
else:
语句 2/语句块 2
-
三元条件运算符:条件为真时的值 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
2. 循环结构
-
概念:循环是用来重复执行一条或者多条语句。如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果为True则重复执行循环体里面的语句
-
while循环:条件表达式为真则执行循环体语句
while 条件表达式:
循环体语句
-
for循环:通常用于可迭代对象的遍历
for 变量 in 可迭代对象:
循环体语句
-
python包含下列几种可迭代对象:序列(字符串、列表、元组、字典),迭代器对象、生成器对象、生成器函数、文件对象。
-
d = {'name':'gaoqi','age':18,'address':'西三旗 001 号楼'} for x in d: #遍历字典所有的 key print(x) for x in d.keys():#遍历字典所有的 key print(x) for x in d.values():#遍历字典所有的 value print(x) for x in d.items():#遍历字典所有的"键值对" print(x)
-
例一:利用 for 循环,计算 1-100 之间数字的累加和;计算 1-100 之间偶数的累加和, 计算 1-100 之间奇数的累加和。
-
sum_all = 0 #1-100 所有数的累加和 sum_even = 0 #1-100 偶数的累加和 sum_odd = 0 #1-100 奇数的累加和 for num in range(101): sum_all += num if num%2==0: sum_even += num else: sum_odd += num print("1-100 累加总和{0},奇数和{1},偶数和{2}".format(sum_all,sum_odd,sum_even))
-
-
例二:打印数字方阵
-
for x in range(5): for y in range(5): print(x,end="\t") print() #仅用于换行
-
-
例三:打印九九乘法表
-
for m in range(1,10): for n in range(1,m+1): print("{0}*{1}={2}".format(m,n,(m*n)),end="\t") print()
-
-
-
break语句:可以用于while和for循环,用来结束整个循环,当有嵌套循环时,break语句只能跳出最近一层循环。
while True: a = input("请输入一个字符(输入 Q 或 q 结束)") if a.upper()=='Q': print("循环结束,退出") break else: print(a)
-
continue 语句:用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最 近的一层循环。
-
else 语句:while和for两大循环语句可以附带一个else语句。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。
while 条件表达式:
循环体
else:
语句块
或者:
for 变量 in 可迭代对象:
循环体
else:
语句块
-
使用zip()并行迭代
-
names = ("高淇","高老二","高老三","高老四") ages = (18,16,20,25) jobs = ("老师","程序员","公务员") for name,age,job in zip(names,ages,jobs): print("{0}--{1}--{2}".format(name,age,job))
-
-
推导式创建序列
-
列表推导式:
-
[表达式 for item in 可迭代对象 ]
-
[表达式 for item in 可迭代对象 if 条件判断]
-
>>> [x for x in range(1,5)] [1, 2, 3, 4] >>> [x*2 for x in range(1,5)] [2, 4, 6, 8] >>> [x*2 for x in range(1,20) if x%5==0 ] [10, 20, 30] >>> [a for a in "abcdefg"] ['a', 'b', 'c', 'd', 'e', 'f', 'g']
-
-
字典推导式
-
格式:{key_expression : value_expression for 表达式 in 可迭代对象}
-
>>> my_text = ' i love you, i love sxt, i love gaoqi' >>> char_count = {c:my_text.count(c) for c in my_text} >>> char_count {' ': 9, 'i': 4, 'l': 3, 'o': 5, 'v': 3, 'e': 3, 'y': 1, 'u': 1, ',': 2, 's': 1, 'x': 1, 't': 1, 'g': 1, 'a': 1, 'q': 1}
-
-
集合推导式
-
{表达式 for item in 可迭代对象 }
-
{表达式 for item in 可迭代对象 if 条件判断}
-
{x for x in range(1,100) if x%9==0} {99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
-
-
生成器推导式(生成元组)
-
注意元组是没有推导式的,生成器推导式返回的是一个生成器对象,而且注意一个生成器对象只能运行一次,第一次迭代可以获得数据第二次迭代数据就没有了
-
>>> (x for x in range(1,100) if x%9==0) <generator object <genexpr> at 0x0000000002BD3048> >>> gnt = (x for x in range(1,100) if x%9==0) >>> for x in gnt: print(x,end=' ') 9 18 27 36 45 54 63 72 81 90 99 >>> for x in gnt: print(x,end='') >>>
-
-
-