day5-容器的相关操作

day5-容器的相关操作

1.列表的相关操作

1)加法和乘法运算

# 列表1+列表2  -  将两个列表合并产生一个新的列表
list1 = [100, 200, 300]
list2 = [1000, 2000, 3000]
print(list1 + list2)

# 列表 * N   -  将列表中的元素重复N次产生一个新的列表
print(list1 * 3)

2)in和not in

# 数据 in 列表    -    判断列表中是否存在指定数据对映的元素
# 数据 not in 列表   -   判断列表中是否不存在指定数据对映的元素
print(10 in list1)
print(100 in list1)
print([100, 200] in list1)

练习:已知一个列表保存多个学生的姓名,要求去掉列表中重复的名字

names = ['小明', '张三', '李四', '张三', '张三', '小明', '王五', '王五']
ming = []
for x in names:
    if x not in ming:
        ming.append(x)
print(ming)

3).相关函数

# max(列表) ,min(列表)
list1 = [1000, 2000, 3000, 4000]
print(max(list1), min(list1))

# sorted(列表) - 将列表中的元素从小到大排序,产生一个新的列表
# sorted(列表,reverse = True) - 将列表中的元素从大到小排序,产生一个新的列表

list1 = [10, 50, 40, 55, 100, 6, 46]
new_list1 = sorted(list1)
print(new_list1)
new_list1 = sorted(list1, reverse=True)
print(new_list1)

# len(列表)  -  获取列表长度(列表中元素的个数)
print(len(list1))

# lest(数据)   -   将指定的数据转换成列表(这儿的数据必须是序列)
# 所有的序列都可以转换成列表,转换列表的时候,序列中的元素就是列表的元素
print(list('abc'))      # ['a','b','c']
print(list(range(5)))   # [0, 1, 2, 3, 4]

2.字典

1)字典存在的价值

stu = {'name': '小米', 'ang': 20, '身高': 180, '体重': 85}
print(stu['name'])
print(stu['体重'])

结论: 需要同时保存多个意义不同的数据就使用字典;需要同时保存多个意义相同的数据就使用列表

2)什么是字典(dict)

容器:

  • 将{}作为容器的标志,里面多个将键值对用逗号隔开(一个键值对就是一个元素):{键1:值1,键2:值2, 键3:值3,…}

  • 字典是可变的(支持增删改);字典无序(顺序不影响结果;不支持下标操作)

  • 键的要求:

  • a.不可变类型的数据才能作为字典的(数字, 字符串, 布尔, 空值, 元组),一般使用字符串作为字典键。

  • b.键是唯一

  • 值的要求: 没有要求

空字典

pict1 = {}

字典是无序的

pict2 = ({'a' : 10, 'b' : 10} == {'b' : 20, 'a' : 10})   # True

字典的键必须是不可变类型的数据

dict3 = {1 : 10, 'a' :20, True : 30, None : 40, (10, 20) : 50}
print(dict2)

键是唯一的

dict4 = {'a': 10, 'b': 20, 'c': 30}
print(dict4)
6.字典的基本操作

1.查 - 获取字典的值

  • 查单个 - 获取一个值
    • a.字典[键] - 获取字典中指定键对应值
    • b.字典get(键) - 获取字典中指定键对应值;如果键不存在不会报错,并且会返回Ning
    • c.字典.get(键,默认值) - 获取字典中指定键对应值;如果键不存在不会报错,并且会返回默认值
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母狗'}

print(dog['age'])

print(dog.get('age'))

print(dog.get('age', 0))
  • 生活中的字典:定义一个变量保存一个班级的信息
class1 = {
    'name': 'python2302',
    'address': '11教',
    'teacher': {'name': '余婷', 'age': 10, 'gender': '女', 'qq': '45621456568'},
    'header_teacher': {'name': '舒玲', 'age': 18, 'gender': '女', 'tel': '110'},
    'students': [
        {'name': 'stu1', 'age': 19, 'gender': '男', 'link_man': {'name': '张三', 'tel': '120'}},
        {'name': 'stu2', 'age': 16, 'gender': '女', 'link_man': {'name': '李四', 'tel': '119'}},
        {'name': 'stu3', 'age': 22, 'gender': '女', 'link_man': {'name': '老王', 'tel': '234'}},
        {'name': 'stu4', 'age': 17, 'gender': '男', 'link_man': {'name': '赵六', 'tel': '2112'}},
        {'name': 'stu5', 'age': 29, 'gender': '男', 'link_man': {'name': '邓七', 'tel': '5482'}},
        {'name': 'stu6', 'age': 25, 'gender': '女', 'link_man': {'name': '王八', 'tel': '9223'}}
    ]

1)打印班级名称

print(class1['name'])

2)打印讲师的名字和QQ

print(class1['teacher']['name'], class1['teacher']['qq'])

3)打印班主任的电话

print(class1.get('header_teacher').get('tel'))

4)打印所有学生的名字

for i in class1['students']:
    print(i['name'])

5)打印所有未成年学生的名字和性别

for x in class1['students']:
    if x['age'] < 18:
        print(x['name'], x['gender'])

6)打印所有学生的联系人名字

for n in class1['students']:
    print(n.get('link_man').get("name"))

7)计算所有男生的平均年龄

total_age = count = 0
for stu in 'students':
    if stu['gender'] == '男':
        total_age += stu['age']
        count += 1
print(int(total_age / count))

2.遍历

"""
for 变量 in 字典:
     循环体(变量依次取到的是字典的键)
"""
dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'gender': '母狗'}

注意:字典保存数据真正想要保存的是值,键是用来对值进行区分和说明

3.字符串和元组

字符串(str)

  • 容器;将’'或者""作为容器的标志,里面的每一个符号就是字符串中的每个元素

  • 例如;‘abc’,‘10,20,30’

  • 字符串是不可变的;字符串是有序的(支持下标操作)

  • 元素;字符串的元素又叫字符,分为普通字符和转义支付两种

  • \n - 换行

  • \t - 水平制表符(tab键)

f = "欢迎学习\npython"
print(f)
g = "今天天气\t很晴朗"
print(g)

字符串查操作

  • 字符串获取元素的方法和列表一样
msg = 'hallo world!'
print(msg[0])
print(msg[-1])

for x in msg:
    print(x)

str1 = 'abc'
str2 = '123'
print(str1 + str2)
print(str1 * 3)

print(len(str1))

元组

  • 元组就是不可变的列表:(元素1, 元素2, 元素3, …)
t1 = (1, 2, 3, 4, 5,)
print(t1[2])
print(t1[-1])
4.字符串和字典的作业

1.输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

str1 = 'abcd1234'
print(str1[1], str1[3], str1[5], str1[7])

2.输入用户名,判断用户名是否合法(用户名长度6~10位)

numa = input("请输入用户名:")
if 6 <= len(numa) <= 10:
    print("恭喜,您输入合法!")
else:
    print("抱歉,您输入不合法!")

3.练习

student = [
    {'name': '张三', 'age': 20, 'achievement': 65, 'tel': 123, 'gender': '男'},
    {'name': '小红', 'age': 18, 'achievement': 80, 'tel': 120, 'gender': '女'},
    {'name': '李四', 'age': 23, 'achievement': 75, 'tel': 197, 'gender': '男'},
    {'name': '晓燕', 'age': 15, 'achievement': 50, 'tel': 258, 'gender': '女'},
    {'name': '小张', 'age': 17, 'achievement': 59, 'tel': 178, 'gender': '性别不明'},
    {'name': '王麻子', 'age': 24, 'achievement': 90, 'tel': 150, 'gender': '男'},
    {'name': '丽丽', 'age': 25, 'achievement': 49, 'tel': 110, 'gender': '女'},
]

统计不及格学生的个数

count = 0
for x in student:
    if x['achievement'] < 60:
        count += 1
print('不及格的个数为:', count)

打印不及格未成年学生的名字和对应的成绩

for x in student:
    if x['age'] < 18 or x['achievement'] < 60:
        print(x['name'], x['achievement'])

求所有男生的平均年龄

total_age = 0
count = 0
for x in student:
    if x['gender'] == '男':
        count += 1
        total_age += x['age']
print('男生的平均年龄为:', total_age / count)

打印手机尾号是8的学生的名字

count = 0
for x in student:
    if int(x['tel']) % 10 == 8:
        print(x['name'])

打印最高分和对应的学生的名字

list_results = [i['achievement'] for i in student]
for i in student:
    if i['achievement'] == max(list_results):
        print(i['name'], '最高分是', max(list_results), sep='')

删除性别不明的所有学生

for x in student:
    if x['gender'] == '性别不明':
        student.remove(x)
print(student)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值