本文是对Python中的列表、元组、字典、集合知识的梳理总结,将Python的重要知识点梳理成条,通过一个简单的员工管理系统(EMS)实战,可以深入的了解Python的基本知识。本文基本上涵盖了在日常使用过程中的语法,没有全部总结的地方,在文中添加了官方文档相应部分的超链接,如果需要直接点击查看即可。本文主要参考阿里云大学的Python语言基础课程(课程链接),感兴趣的可以看一下,调成1.5倍或者2倍速播放,发现新世界,一边听单口相声,一边把Python的基础知识又复习了一遍。いただきます。本文也是Python系列文章的第2篇。
【Python 基础】一文补齐Python基础知识
【趣学Python:B站四大恶人】一文掌握列表、元组、字典、集合
【Python进阶】一文掌握Python函数用法
【Python进阶】Python面向对象之类与对象详解
【Python进阶】Python面向对象之装饰器与封装详解
【Python进阶】Python面向对象之继承和多态详解
【Python进阶】Python异常处理和模块详解
【Python进阶】Python文件(I/O)操作详解
---------------- 《中美合拍西游记》演员信息管理系统 ----------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:1
------------------------------------------------------------------
序号 姓名 性别 特长 住址
001 Six·YoungBoy male SignNames SellFilms RepeatSpecialist 知站B乎
002 东旦:朱一旦 male 非洲警告,戴劳力士男人的朴实无华且枯燥 山东
003 西农:华农兄弟 male 漂亮警告,我的是我的朋友家的也是我的 江西
004 南漠:大漠叔叔 male 偷木瓜警告...偷你所偷应偷尽偷能偷就偷 海南
005 北耿:手工耿 male 刑部尚书,专做无用良品有用刑具 河北
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:2
------------------------------------------------------------------
请输入演员的ID:006
请输入演员的姓名:齐天大圣孙悟空
请输入演员的性别:male
请输入演员的特长:金箍棒,火眼金睛,七十二变
请输入演员的住址:花果山
以下演员将被添加到系统中
--------------------------------------------------------------
序号 姓名 性别 特长 住址
006 齐天大圣孙悟空 male 金箍棒,火眼金睛,七十二变 花果山
--------------------------------------------------------------
是否确认该操作[Y/N]:y
--------------------------------------------------------------
添加成功!
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:1
------------------------------------------------------------------
序号 姓名 性别 特长 住址
001 Six·YoungBoy male SignNames SellFilms RepeatSpecialist 知站B乎
002 东旦:朱一旦 male 非洲警告,戴劳力士男人的朴实无华且枯燥 山东
003 西农:华农兄弟 male 漂亮警告,我的是我的朋友家的也是我的 江西
004 南漠:大漠叔叔 male 偷木瓜警告...偷你所偷应偷尽偷能偷就偷 海南
005 北耿:手工耿 male 刑部尚书,专做无用良品有用刑具 河北
006 齐天大圣孙悟空 male 金箍棒,火眼金睛,七十二变 花果山
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:3
------------------------------------------------------------------
请输入要删除的演员的序号:2
以下演员将被删除
------------------------------------------------------------------
序号 姓名 性别 特长 住址
002 东旦:朱一旦 male 非洲警告,戴劳力士男人的朴实无华且枯燥 山东
------------------------------------------------------------------
该操作不可恢复,生命只有一次,三思而后行,是否确认[Y/N]:n
------------------------------------------------------------------
唉,没删呢,没删呢!操作已取消!恭喜您,您的狗命保住了!
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:3
------------------------------------------------------------------
请输入要删除的演员的序号:3
以下演员将被删除
------------------------------------------------------------------
序号 姓名 性别 特长 住址
003 西农:华农兄弟 male 漂亮警告,我的是我的朋友家的也是我的 江西
------------------------------------------------------------------
该操作不可恢复,生命只有一次,三思而后行,是否确认[Y/N]:y
------------------------------------------------------------------
演员已被您删除!您将获得:
1.非洲自由行
2.带到河边
3.海南看木瓜
4.专属刑具
套餐任选其一
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:4
------------------------------------------------------------------
点击回车键退出!
------------------------------------------------------------------
今年下半年,
中美合拍的西游记即将正式开机,
我继续扮演美猴王孙悟空,
我会用美猴王艺术形象努力创造一个正能量的形象,
文体两开花,
弘扬中华文化,
希望大家能多多关注。
文体两开花!
------------------------------------------------------------------
my_list[索引]
;如果使用的索引超出最大范围,会抛出异常;-1
表示倒数第一个,-2
表示倒数第二个,以此类推;列表[起始:结束]
;列表[起始:结束:步长]
;print(stus[::-1])
会将返回列表的倒序排列;+
将两个列表拼接为一个列表;例如: my_list = [1,2,3] + [4,5,6]
;*
将列表重复指定的次数;例如:my_list = [1,2,3] * 5
;in
用来检查指定元素是否存在于列表中;如果存在,返回True
,否则返回False
;not in
用来检查指定元素是否不在列表中;如果不在,返回True
,否则返回False
;len()
获取列表中的元素的个数;min()
获取列表中的最小值;max()
获取列表中的最大值;对象.方法()
的形式调用;s.count()
统计指定元素在列表中出现的次数;列表.index(元素)
获取指定元素在列表中的第一次出现时索引;index(元素[,i[,j]])
中的第二个参数(可选), i
表示查找的起始位置 , 第三个参数(可选)j
,表示查找的结束位置;如果要获取列表中没有的元素,会抛出异常,ValueError: 'xxx' is not in list
,看一个例子就很好理解了:sixology_info = ['其研究对象是:',
'灵堂卖片王', '复读小能手', '无情签字机', '国际巨星', '章铁承恩', 'six-young-boy',
'的言论与行为模式',
'主要分为旧六学与新六学',
'旧六学:主要依靠老艺术家的黑历史进行教育意义的交流。但随着队伍的壮大,旧六学慢慢被混淆,转化成了毫无目的的讽刺谩骂。',
'新六学:个别六学大师意识到队伍的混乱后,寻找先进经验、整顿队伍并寻找六学本质的存在意义以及表达方式--在鬼畜以及不断复读加上表情包这种三位一体的基础上,建立了新六学理念。']
sixology_research_target = sixology_info.index('six-young-boy',6,7)
print('Your evaluation of sixology:{}66!'.format(sixology_research_target))
sixology_info.index('孙悟空')
'''
输出:Your evaluation of sixology:666!
报错:ValueError: '孙悟空' is not in list
通过上例,不复习了旧知识,还学习了新知识;不仅学习了古典新用,还学习了英语表达。
'''
#<列表中的内容来自知乎>
sixology_info[12] = '孙悟空扛着金箍棒正在赶来的路上'
;del sixology_info[4]
,就把列表中索引为4
的元素删除了,刚才的语句把 国际巨星
删除了;同样可以使用带步长的删除元素操作:del sixology_info[::2]
,该语句将隔一个删除一个元素,为了保证六学的信息完整,因此我并没有运行该语句;sixology_info[13:18] = ['六学家:指拥有自己的六学范式、有原创的哲六学基础理论与六学体系的六学学人',
'六学学者:以六学为研究对象、对六学有很高造诣的六学学人',
'六学家与六学学者的区别:有没有自己的六学范式和原创的六学基础理论,是六学家与一般的六学学者的根本区别',
'六学家的存在意义:是研究六先生的行为后,对六先生进行指导,使其走上正确德艺双馨老艺术家的道路。',
'根据最新的结论显示,六先生在广大的六学学者以及六学家的努力下。已经有了自我改正的想法与动向(详情可以转至你博与你站)。不论态度问题,至少智商方面已经超越了原有的标准。']
list()
函数将其他的序列转换为list;例如:six_young_boy_other_film = ‘《吴承恩与西游记》’
,–> six_young_boy_other_film = list(six_young_boy_other_film)
可实现字符串到列表的转换;.append()
向列表的最后添加一个元素;.insert(位置,元素)
向列表的指定位置插入一个元素;注意使用索引插入与该函数插入的区别:使用索引插入相当于改变索引位置的元素,而insert()函数,是插入一个元素,原来索引位置的元素后移,即索引+1;.extend()
使用新的序列来扩展当前序列,需要一个序列作为参数,它会将该序列中的元素添加到当前列表中;相当于 +=
运算;.clear()
清空序列;.pop(索引)
根据索引删除,并且会返回被删除的元素;如果索引不写,默认删除最后一个;.remove(值)
删除指定值的元素,如果相同值的元素有多个,默认只会删除第一个;.reverse()
用来反转列表;.sort()
用来对列表中的元素进行排序,默认是升序排列; 如果需要降序排列,则需要传递一个 reverse=True
作为参数;'''
比如可以让孙悟空待在花果山,别来了
'''
sixology_info.insert(12,'悟空,你别来了,这有紧箍咒!')
sixology_info.remove('孙悟空扛着金箍棒正在赶来的路上')
# 通过while循环遍历列表
i = 0
while i < len(my_list):
print(my_list[i])
i += 1
# 通过for循环遍历列表
for 变量 in 序列:
代码块
range()
是一个函数,可以用来生成一个自然数的序列;()
来创建元组;例如my_tuple = ()
创建了一个空元组;my_tuple[6] = '孙悟空'
出错:TypeError: 'tuple' object does not support item assignment
;my_tuple = 10,20
a , b = b , a
;*
,这样变量将会获取元组中所有剩余的元素;a , b , *c = my_tuple
;*
变量,例如:*a , *b , c = my_tuple
报错:SyntaxError: two starred expressions in assignment
;可变对象指的是值可变。
a = [1,2,3]
a[0] = 10
(改对象);a = [4,5,6] (改变量)
==
!=
比较的是对象的值是否相等 ;is
is not
比较的是对象的id是否相等(比较两个对象是否是同一个对象);a = [1,2,3]
b = [1,2,3]
print(a,b)
print(id(a),id(b))
print(a == b) # a和b的值相等,使用==会返回True
print(a is b) # a和b不是同一个对象,内存地址不同,使用is会返回False
{}
来创建字典,d = {}
创建了一个空字典;print(d['name'],d['age'],d['gender'])
;print(d['hello']) KeyError: 'hello'
;[1,2] ('a',3) 'ab'
;d = dict([('name','孙悟空'),('age',18)])
;len(字典)
获取字典中键值对的个数;in
检查字典中是否包含指定的键;not in
检查字典中是否不包含指定的键;d[key]
;通过[ ]
来获取值时,如果键不存在,会抛出异常 KeyError
;.get(key[, default])
方法用来根据键来获取字典中的值;如果获取的键在字典中不存在,会返回None
;也可以指定一个默认值,来作为第二个参数,这样获取不到值时将会返回默认值;print(d.get('name'))
;d[key] = value
如果key存在则覆盖,不存在则添加;setdefault(key[, default])
可以用来向字典中添加key-value;如果key已经存在于字典中,则返回key的值,不会对字典做任何操作;如果key不存在,则向字典中添加这个key,并设置value;.update([other])
;将其他的字典中的key-value添加到当前字典中;如果有重复的key,则后边的会替换到当前的;.popitem()
随机删除字典中的一个键值对,一般都会删除最后一个键值对;删除之后,它会将删除的key-value作为返回值返回;返回的是一个元组,元组中有两个元素,第一个元素是删除的key,第二个是删除的value;当使用.popitem()
删除一个空字典时,会抛出异常 KeyError: 'popitem(): dictionary is empty'
;.clear()
方法用来清空字典;.copy()
方法用于对字典进行浅复制;复制以后的对象,和原对象是独立,修改一个不会影响另一个;注意,浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制;.keys()
方法会返回字典的所有的key;该方法会返回一个序列,序列中保存有字典的所有的键;.keys()
来获取所有的键:for k in d.keys() :
print(k , d[k])
.values()
方法会返回一个序列,序列中保存有字典的左右的值;for v in d.values():
print(v)
.items()
方法会返回字典中所有的项,它会返回一个序列,序列中包含有双值子序列;双值分别是,字典中的key和value;{}
来创建集合;s = {10,3,5,1,2,1,2,3,1,1,1,1} #
# s = {[1,2,3],[4,6,7]} TypeError: unhashable type: 'list'
set()
函数来创建集合;s = set()
创建了一个空集合;set()
来将序列和字典转换为集合:s = set([1,2,3,4,5,1,1,2,3,4,5])
s = set('hello')
s = set({'a':1,'b':2,'c':3}) # 使用set()将字典转换为集合时,只会包含字典中的键
in
和 not in
来检查集合中的元素;len()
获取集合中元素的数量;.update()
方法将一个集合中的元素添加到当前集合中;.update()
可以传递序列或字典作为参数,字典只会使用键;.pop()
方法随机删除并返回一个集合中的元素;.remove()
方法删除集合中的指定元素;.clear()
方法清空集合;.copy()
方法对集合进行浅复制;# 创建两个集合
s = {1,2,3,4,5}
s2 = {3,4,5,6,7}
# & 交集运算
result = s & s2 # {3, 4, 5}
# | 并集运算
result = s | s2 # {1,2,3,4,5,6,7}
# - 差集
result = s - s2 # {1, 2}
# ^ 异或集 获取只在一个集合中出现的元素
result = s ^ s2 # {1, 2, 6, 7}
# <= 检查一个集合是否是另一个集合的子集
# 如果a集合中的元素全部都在b集合中出现,那么a集合就是b集合的子集,b集合是a集合超集
a = {1,2,3}
b = {1,2,3,4,5}
result = a <= b # True
result = {1,2,3} <= {1,2,3} # True
result = {1,2,3,4,5} <= {1,2,3} # False
# < 检查一个集合是否是另一个集合的真子集
# 如果超集b中含有子集a中所有元素,并且b中还有a中没有的元素,则b就是a的真超集,a是b的真子集
result = {1,2,3} < {1,2,3} # False
result = {1,2,3} < {1,2,3,4,5} # True
# >= 检查一个集合是否是另一个的超集
# > 检查一个集合是否是另一个的真超集
print('result =',result)
注意!为了展示所学知识,代码中混用了很多不同的实现方法,注意甄别!
命令行版本的员工管理系统(Employee Manager System,EMS):
功能:
完整代码:
import sys
import os
# 显示欢迎信息
print('-'*16 , '《中美合拍西游记》演员信息管理系统', '-'*16)
################################################################################
'''
此部分代码的功能:保存系统中默认演员的信息
注意:此处为了展示命名规则,混用了下划线命名法和驼峰命名法,实际开发中建议不要混用!
'''
actor_default = {'id':('%03d'%1),
'name':'Six·YoungBoy',
'sex':'male',
'skill':'SignNames SellFilms RepeatSpecialist',
'adress':'知站B乎'
}
actor_EastDan = {'id':('%03d'%2),
'name':'东旦:朱一旦',
'sex':'male',
'skill':'非洲警告,戴劳力士男人的朴实无华且枯燥',
'adress':'山东'
}
actor_WestNong = {'id':('%03d'%3),
'name':'西农:华农兄弟',
'sex':'male',
'skill':'漂亮警告,我的是我的朋友家的也是我的',
'adress':'江西'
}
actor_SouthMo = {'id':('%03d'%4),
'name':'南漠:大漠叔叔',
'sex':'male',
'skill':'偷木瓜警告...偷你所偷应偷尽偷能偷就偷',
'adress':'海南'
}
actor_NorthGeng = {'id':('%03d'%5),
'name':'北耿:手工耿',
'sex':'male',
'skill':'刑部尚书,专做无用良品有用刑具',
'adress':'河北'
}
#创建一个列表,用来存储演员信息
main_actor_info = [actor_default,actor_EastDan,actor_WestNong,actor_SouthMo]
main_actor_info.append(actor_NorthGeng)
################################################################################
shell_information = '\t序号\t姓名\t\t性别\t\t特长\t\t住址'
while True:
# 显示用户的选项
print('请选择要做的操作:')
print('\t1.查询演员')
print('\t2.添加演员')
print('\t3.删除演员')
print('\t4.退出系统')
user_choose = input('请选择[1-4]:')
print('-'*66)
# 根据用户的选择做相关的操作
if user_choose == '1' :
'''
查询演员信息并输出
'''
print(shell_information)
# 显示演员信息
for actor_info in main_actor_info :
single_info = [single_info for single_info in actor_info.values()]
print(f'\t{single_info[0]}\t'\
+'%s \t%s\t'%(single_info[1],single_info[2])\
+'{}\t{}\t'.format(single_info[3],single_info[4]))
elif user_choose == '2':
'''
功能:添加演员
获取要添加演员的信息,ID、姓名、性别、特长、住址,用字典保存
将每个演员的信息字典添加到演员列表
'''
actor_id = input('请输入演员的ID:')
actor_name = input('请输入演员的姓名:')
actor_gender = input('请输入演员的性别:')
actor_skill = input('请输入演员的特长:')
actor_address = input('请输入演员的住址:')
# 创建新的演员信息字典
new_actor_info = {}
new_actor_info['id'] = actor_id
new_actor_info['name'], new_actor_info['gender'] = actor_name, actor_gender
new_actor_info['skill'], new_actor_info['address'] = actor_skill, actor_address
# 显示提示信息
print('以下演员将被添加到系统中')
print('-'*62)
print('\t序号\t姓名\t性别\t特长\t住址')
print(f'\t{actor_id}\t{actor_name}\t{actor_gender}\t{actor_skill}\t{actor_address}')
print('-'*62)
user_confirm = input('是否确认该操作[Y/N]:')
# 判断
if user_confirm == 'y' or user_confirm == 'yes' :
# 如果用户确认,则更新系统中的信息
main_actor_info.append(new_actor_info)
print('-'*62)
print('添加成功!')
else :
print('添加已取消!')
elif user_choose == '3':
'''
删除演员,根据演员的ID删除演员
'''
del_id = int(input('请输入要删除的演员的序号:'))
# 判断序号是否有效
if 0 < del_id <= len(main_actor_info) :
# 输入合法,根据序号来获取索引
del_id -= 1
# 显示一个提示信息
print('以下演员将被删除')
print('-'*66)
print(shell_information)
del_actor_info = [value for value in main_actor_info[del_id].values()]
print(f'\t{del_actor_info[0]}\t{del_actor_info[1]}\t{del_actor_info[2]}\t{del_actor_info[3]}\t{del_actor_info[4]}\t')
print('-'*66)
user_confirm = input('该操作不可恢复,生命只有一次,三思而后行,是否确认[Y/N]:')
if user_confirm == 'y' or user_confirm == 'yes' :
# 删除元素
main_actor_info.pop(del_id)
print('-'*66)
print('演员已被您删除!您将获得: \n\t1.非洲自由行\n\t2.带到河边\n\t3.海南看木瓜\n\t4.专属刑具\n套餐任选其一')
else :
print('-'*66)
print('唉,没删呢,没删呢!操作已取消!恭喜您,您的狗命保住了!')
else :
print('您的输入有误,请重新操作!')
elif user_choose == '4':
'''
退出操作
'''
input('点击回车键退出!')
print('-'*66)
print('今年下半年,\n中美合拍的西游记即将正式开机,\n我继续扮演美猴王孙悟空,\n我会用美猴王艺术形象努力创造一个正能量的形象,\n文体两开花,\n弘扬中华文化,\n希望大家能多多关注。')
print('文体两开花!')
print('-'*66)
break
else :
print('您的输入有误,请重新选择!')
print('-'*66)
测试输出
---------------- 《中美合拍西游记》演员信息管理系统 ----------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:1
------------------------------------------------------------------
序号 姓名 性别 特长 住址
001 Six·YoungBoy male SignNames SellFilms RepeatSpecialist 知站B乎
002 东旦:朱一旦 male 非洲警告,戴劳力士男人的朴实无华且枯燥 山东
003 西农:华农兄弟 male 漂亮警告,我的是我的朋友家的也是我的 江西
004 南漠:大漠叔叔 male 偷木瓜警告...偷你所偷应偷尽偷能偷就偷 海南
005 北耿:手工耿 male 刑部尚书,专做无用良品有用刑具 河北
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:2
------------------------------------------------------------------
请输入演员的ID:006
请输入演员的姓名:齐天大圣孙悟空
请输入演员的性别:male
请输入演员的特长:金箍棒,火眼金睛,七十二变
请输入演员的住址:花果山
以下演员将被添加到系统中
--------------------------------------------------------------
序号 姓名 性别 特长 住址
006 齐天大圣孙悟空 male 金箍棒,火眼金睛,七十二变 花果山
--------------------------------------------------------------
是否确认该操作[Y/N]:y
--------------------------------------------------------------
添加成功!
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:1
------------------------------------------------------------------
序号 姓名 性别 特长 住址
001 Six·YoungBoy male SignNames SellFilms RepeatSpecialist 知站B乎
002 东旦:朱一旦 male 非洲警告,戴劳力士男人的朴实无华且枯燥 山东
003 西农:华农兄弟 male 漂亮警告,我的是我的朋友家的也是我的 江西
004 南漠:大漠叔叔 male 偷木瓜警告...偷你所偷应偷尽偷能偷就偷 海南
005 北耿:手工耿 male 刑部尚书,专做无用良品有用刑具 河北
006 齐天大圣孙悟空 male 金箍棒,火眼金睛,七十二变 花果山
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:3
------------------------------------------------------------------
请输入要删除的演员的序号:2
以下演员将被删除
------------------------------------------------------------------
序号 姓名 性别 特长 住址
002 东旦:朱一旦 male 非洲警告,戴劳力士男人的朴实无华且枯燥 山东
------------------------------------------------------------------
该操作不可恢复,生命只有一次,三思而后行,是否确认[Y/N]:n
------------------------------------------------------------------
唉,没删呢,没删呢!操作已取消!恭喜您,您的狗命保住了!
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:3
------------------------------------------------------------------
请输入要删除的演员的序号:3
以下演员将被删除
------------------------------------------------------------------
序号 姓名 性别 特长 住址
003 西农:华农兄弟 male 漂亮警告,我的是我的朋友家的也是我的 江西
------------------------------------------------------------------
该操作不可恢复,生命只有一次,三思而后行,是否确认[Y/N]:y
------------------------------------------------------------------
演员已被您删除!您将获得:
1.非洲自由行
2.带到河边
3.海南看木瓜
4.专属刑具
套餐任选其一
------------------------------------------------------------------
请选择要做的操作:
1.查询演员
2.添加演员
3.删除演员
4.退出系统
请选择[1-4]:4
------------------------------------------------------------------
点击回车键退出!
------------------------------------------------------------------
今年下半年,
中美合拍的西游记即将正式开机,
我继续扮演美猴王孙悟空,
我会用美猴王艺术形象努力创造一个正能量的形象,
文体两开花,
弘扬中华文化,
希望大家能多多关注。
文体两开花!
------------------------------------------------------------------