例子:
员工编号 部门编号 姓名 工资
1001 9002 师父 60000
1002 9001 孙悟空 50000
1003 9002 猪八戒 20000
1004 9001 沙僧 30000
1005 9001 小白龙 15000
题目:
--创建列表嵌套字典表达以上数据
--定义函数,打印所有员工信息,
格式:xx的员工编号是xx,部门编号是xx,月薪xx元.
--定义函数,获取部门9002的所有员工姓名
--定义函数,获取薪资最低的员工
--定义函数,根据薪资对员工列表升序排序
--定义函数,删除姓名是3个字的员工
列表集合中内容为字典 以键值对的形式保存每个人的具体信息
# ---------------全局变量(数据)-------------
list_employees = [
{
"eid": 1001,
"did": 9002,
"name": "师父",
"money": 60000
},
{"eid": 1002, "did": 9001, "name": "孙悟空", "money": 50000},
{"eid": 1003, "did": 9002, "name": "猪八戒", "money": 20000},
{"eid": 1004, "did": 9001, "name": "沙僧", "money": 30000},
{"eid": 1005, "did": 9001, "name": "小白龙", "money": 15000},
]
输出格式 print(f" 用到变量{x} ")
# ---------------定义函数(算法)-------------
# 1. 打印所有员工信息,
# 格式:xx的员工编号是xx,部门编号是xx,月薪xx元。
def print_employees():
for emp in list_employees:
print(f"{emp['name']}的员工编号是{emp['eid']},部门编号是{emp['did']},月薪{emp['money']}元.")
返回列表类型,所有姓名的集合
# 2. 查找部门时9002的员工名称
def get_name_by_did_9002():
list_name = [];
for emp in list_employees:
if emp["did"] == 9002:
list_name.append(emp["name"])
return list_name
返回员工所有信息 即字典类型
掌握range()
(1) 作用:
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)。
(2) 语法:
range(开始点,结束点,间隔)
(3) 说明:
函数返回的可迭代对象可以用for取出其中的元素
返回的数字不包含结束点
开始点默认为0
间隔默认值为1
# 3. 定义函数,获取薪资最低的员工
def get_min_by_money():
min_value = list_employees[0];
for i in range(1, len(list_employees)):
if min_value["money"] > list_employees[i]["money"]:
min_value = list_employees[i]
return min_value
冒泡排序 eg 10个数 比较9趟 第一趟比9次 第二趟比8次 注意变量
# 4. 定义函数,根据购买数量对订单列表降序(大->小)排列
def descending_order_by_money():
for r in range(len(list_employees) - 1):
for c in range(r + 1, len(list_employees)):
if list_employees[r]["money"] < list_employees[c]["money"]:
list_employees[r], list_employees[c] = list_employees[c], list_employees[r]
删除注意!!!倒着删 由于有序列表下标自动补齐
# --定义函数,删除姓名是3个字的所有员工
def delete_all_by_name_eq_3():
for i in range(len(list_employees) - 1, -1, -1):
if len(list_employees[i]["name"]) == 3:
del list_employees[i]
注意input()得到的是字符串 要么拿字符串比较 要么转化为数字再比
# ---------------程序入口-------------
while True:
number = input("请输入选项:")
if number == "1":
print_employees()
elif number == "2":
list_name = get_name_by_did_9002()
print(list_name)
elif number == "3":
value = get_min_by_money()
print(value)
elif number == "4":
descending_order_by_money()
print(list_employees)
elif number == "5":
delete_all_by_name_eq_3()
print(list_employees)
简述字符串,列表,元祖,字典各容器的特点
字符串:属于序列类型、有下标(且唯一)可以进行切片操作,不能改变值。
列表:有序序列、有下标、可以存贮任何类型的数据,内容可以进行增删改查。
元组:有序序列、有下标、可以存储任何类型数据,可以进行切片、内容不可以改变。元组和列表可以转换,但转换后的为另存的新对象,对转换前的对象没影响。
字典:不是序列类型,无序、没有下标,内容可以改变,是一种键值对映射。键名唯一,键为哈希类型,不能改变,因此列表和字典不能作为键。值可以是任意类型。
列表[]:存储变量,可变,序列
元组():存储变量,不可变,序列
字典{}:存储键值对,可变,散列,充当键的数据类型必须是不可变
可变:预留空间+自动扩容
例如:列表、字典...
优点:使用灵活
缺点:占用内存较多
不可变:按需分配
例如:元组、字符串、数值、布尔...
优点:占用内存较少
缺点:使用不灵活
序列与散列
序列:有顺序,支持索引切片
散列:没顺序,定位元素最快(哈希算法)
索引、切片
1.索引index(容器通用操作)
(1) 作用:定位单个容器元素。
(2) 语法:容器[整数]
(3) 说明:
正向索引从0开始,第二个索引为1,最后一个为len(s)-1。
反向索引从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)。
(4)函数:
len(obj) –> 返回容器的长度
2.切片slice(容器通用操作)
(1) 作用:
定位多个容器元素。
(2) 语法:
容器[开始索引:结束索引:步长]
(3) 说明:
结束索引不包含该位置元素
步长是切片每次获取完当前元素后移动的偏移量
开始、结束和步长都可以省略