Python学习

Python基础Day4—容器类型之元组、字典

2019-11-23  本文已影响0人  黄晶_id

元组 — tuple

元组:也是一个容器类型,可以存储多个任意类型的数据,元组好比是一个只读的列表,只能获取数据不能对元组中的数据进行修改。
元组的表现形式: (1, "3"),最外层表现形式是一对小括号

my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))

print(my_tuple)
print(type(my_tuple))

#########  运行结果  ############

(1, 3.14, True, 'abc', [1, 2], (1, 54))
<class 'tuple'>

不能对元组中的数据进行修改

如果对元组中的数据进行修改就会报错:

my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))

my_tuple[0] = 2
del my_tuple[-1]

print(my_tuple)

#########  运行结果  ############

TypeError: 'tuple' object does not support item assignment

注意:元组只能获取数据

根据下标获取元组中的数据

my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))

result = my_tuple[0]
print(result)

result = my_tuple[-1]
print(result)

#########  运行结果  ############

1
(1, 54)
元组的切片

字符串,列表,元组都有切片处理

my_tuple = (1, 3.14, True, "abc", [1, 2], (1, 54))

result = my_tuple[1:4]
print(result)

#########  运行结果  ############

(3.14, True, 'abc')

元组的使用场景:

通过元组给多个格式化占位符进行传参:

print("我叫:%s 年龄:%d" % ("李四", 20))

#########  运行结果  ############

我叫:李四 年龄:20

元组的注意点:

元祖中若只有一个元素时把后面的逗号省去了将不再是元祖类型:

my_tuple = ("abc",)
my_tuple1 = ([1, 2],)


print(my_tuple, type(my_tuple))
print(my_tuple1, type(my_tuple1))

print("=== 元祖中只有一个元素把后面的逗号省去了将不再是元祖类型 ===")

my_tuple2 = ("abc")
my_tuple3 = ([1, 2])

print(my_tuple2, type(my_tuple2))
print(my_tuple3, type(my_tuple3))

#########  运行结果  ############

('abc',) <class 'tuple'>
([1, 2],) <class 'tuple'>
=== 元祖中只有一个元素把后面的逗号省去了将不再是元祖类型 ===
abc <class 'str'>
[1, 2] <class 'list'>

index和count方法结合元组使用

count: 统计指定数据在元组里面的次数

my_tuple = (1, 3, "1", 1)

# 统计指定数据1在元组里面出现的次数
result = my_tuple.count(1)
print(result)

#########  运行结果  ############

2

index: 根据指定数据,获取数据在元组的下标

my_tuple = (1, 3, "1", 1)

# 元祖结合index使用获取数据3在元组的下标
result = my_tuple.index(3)

#########  运行结果  ############

1

元祖的遍历

for循环遍历元组中的每一个数据

my_tuple = ('西施', "貂蝉", "王昭君", "杨玉环")

for value in my_tuple:
    print(value)

#########  运行结果  ############

西施
貂蝉
王昭君
杨玉环

while循环遍历元祖中的每一个数据

my_tuple = ('西施', "貂蝉", "王昭君", "杨玉环")
index = 0
while index <= 3:
    result = my_tuple[index]
    print(result)
    index += 1

#########  运行结果  ############

西施
貂蝉
王昭君
杨玉环

扩展:len: 获取容器类型数据的长度, len函数获取字符串、列表、元组类型的个数

my_tuple = ('西施', "貂蝉", "王昭君", "杨玉环")
number = len(my_tuple)
print(number)

#########  运行结果  ############

4

应用:

my_tuple = ('西施', "貂蝉", "王昭君", "杨玉环")
##len函数获取元组的结束下标
index = len(my_tuple) - 1

while index >= 0:
    result = my_tuple[index]
    print(result)

    index -= 1

#########  运行结果  ############

杨玉环
王昭君
貂蝉
西施

扩展:反向输出

my_tuple = ('西施', "貂蝉", "王昭君", "杨玉环")

result = my_tuple[::-1]
print(result)

#########  运行结果  ############

('杨玉环', '王昭君', '貂蝉', '西施')

字典 — dict

字典:也是一个容器类型,字典里面的每一个数据都是键值对(key:value), 字典的最外层表现形式: {key:value, ....}
学习字典的目的: 对于存储描述性信息可以使用字典,比如:存储学生信息,老师信息,教室信息,电脑信息

注意:字典中的key是唯一的, 不能重复

定义字典

my_dict = {"age": 20, "name": "李四",  "address": "北京", "sex": "女"}
print(my_dict, type(my_dict))

#########  运行结果  ############

{'age': 20, 'name': '李四', 'address': '北京', 'sex': '女'} <class 'dict'>

通过key获取对应的value值

my_dict = {"age": 20, "name": "李四",  "address": "北京", "sex": "女"}

value = my_dict["age"]
print(value)

sex = my_dict["sex"]
print(sex)

#########  运行结果  ############

20
女

使用上面这种中括号方式获取字典中的value值,如果key不存在那么程序会报错
比如我们想要获取“李四”的学历(educational_history)字典中并没有:

my_dict = {"age": 20, "name": "李四",  "address": "北京", "sex": "女"}

result = my_dict["educational_history"]
print(result)

#########  运行结果  ############

KeyError: 'educational_history'

get方式取值(value)

get方式取值可以提供默认值,如果字典有对应的key,获取key对应的value值,没有就使用默认值:

my_dict = {"age": 20, "name": "李四",  "address": "北京", "sex": "女"}

# get方式取值,如果字典有对应的key就获取key对应的value值
value = my_dict.get("age")
print(value)

# 如果字典没有对应的key使用默认值
result = my_dict.get("educational_history", "硕士")
print(result)

#########  运行结果  ############

20
硕士

字典的增删改查

添加键值对

注意点:如果操作的key在字典里面不存在,那么是添加键值对操作

my_dict = {"name": "西施", "age": 25}
print(my_dict)

# 添加键值对 
my_dict["address"] = "杭州"
print(my_dict)

my_dict["sex"] = "女"
print(my_dict)

#########  运行结果  ############

{'name': '西施', 'age': 25}
{'name': '西施', 'age': 25, 'address': '杭州'}
{'name': '西施', 'age': 25, 'address': '杭州', 'sex': '女'}

修改键值对

注意点:如果操作的key在字典里面,那么是修改键值对操作

my_dict = {"name": "西施", "age": 25}
print(my_dict)

# 修改键值对,注意点:如果操作的key在字典里面,那么是修改键值对操作
my_dict["age"] = 20
print(my_dict)

#########  运行结果  ############

{'name': '西施', 'age': 25}
{'name': '西施', 'age': 20}

删除键值对

del
my_dict = {"name": "西施", "age": 25, "address": "杭州"}
print(my_dict)

##删除键值对
del my_dict["address"]
print(my_dict)

#########  运行结果  ############

{'name': '西施', 'age': 25, 'address': '杭州'}
{'name': '西施', 'age': 25}
pop

扩展:根据key删除键值对,并且返回key对应的value值

my_dict = {"name": "西施", "age": 25, "address": "杭州"}
print(my_dict)

##pop有返回值
value = my_dict.pop("age")
print(value, my_dict)

#########  运行结果  ############

{'name': '西施', 'age': 25, 'address': '杭州'}
25 {'name': '西施', 'address': '杭州'}

查看数据,获取数据

my_dict = {"name": "西施", "age": 25, "address": "杭州"}

result1 = my_dict["name"]
result2 = my_dict["address"]
print(result1, result2)

#########  运行结果  ############

西施 杭州

清除字典中的所有数据

my_dict = {"name": "西施", "age": 25, "address": "杭州"}
print(my_dict)

##清除字典中的所有数据
my_dict.clear()
print(my_dict)

#########  运行结果  ############

{'name': '西施', 'age': 25, 'address': '杭州'}
{}

清除列表中的所有数据

my_list = [1, 3, 5]
print(my_list)

##清除列表中的所有数据
my_list.clear()
print(my_list)

#########  运行结果  ############

[1, 3, 5]
[]

扩展:列表里面通过 extend 完成列表的合并,字典里面通过 update 完成字典的合并

字典的合并 — update

my_dict1 = {"name": "貂蝉", "age": 20}
my_dict2 = {"sex": "女", "address": "无锡", "age": 25}
print(my_dict1)
print(my_dict2)

# 把my_dict2字典中的每一个键值对添加到my_dict1里面
print("====== 合并后 =====")
my_dict1.update(my_dict2)

print(my_dict1)

#########  运行结果  ############

{'name': '貂蝉', 'age': 20}
{'sex': '女', 'address': '无锡', 'age': 25}
====== 合并后 =====
{'name': '貂蝉', 'age': 25, 'sex': '女', 'address': '无锡'}

字典的常见的操作

len函数获取字典的个数

len函数还可以获取:字符串,列表,元组,字典的个数

my_dict = {"name": "猪八戒", "sex": "男"}

# 获取字典的个数
result = len(my_dict)
print(result)

#########  运行结果  ############

2

keys方法获取字典中的所有key

my_dict = {"name": "猪八戒", "sex": "男"}

# keys方法获取字典中的所有key
result = my_dict.keys()

# 返回的是dict_keys类型, 查看数据不方便,可以转换成list类型
print(result, type(result))

# 把dict_keys类型转成list
my_list = list(result)
print(my_list, type(my_list))

#########  运行结果  ############

dict_keys(['name', 'sex']) <class 'dict_keys'>
['name', 'sex'] <class 'list'>

values方法获取字典中的所有value

my_dict = {"name": "猪八戒", "sex": "男"}

# values方法: 获取字典中的所有value
result = my_dict.values()
# 返回的类型是dict_values,查看数据不方便,可以转换成list类型
print(result, type(result))
my_list = list(result)
print(my_list, type(my_list))

#########  运行结果  ############

dict_values(['猪八戒', '男']) <class 'dict_values'>
['猪八戒', '男'] <class 'list'>

items方法获取字典中的所有项数据,每一项数据是一个键值对数据

my_dict = {"name": "猪八戒", "sex": "男"}

result = my_dict.items()
# 返回的数据类型:dict_items,查看数据不方便可以转换list类型
print(result, type(result))

my_list = list(result)
print(my_list, type(my_list))

#########  运行结果  ############

dict_items([('name', '猪八戒'), ('sex', '男')]) <class 'dict_items'>
[('name', '猪八戒'), ('sex', '男')] <class 'list'>

字典的遍历

遍历字典中的所有key

my_dict.keys() 获取字典中的所有key

my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}

# 遍历字典中的所有key
for key in my_dict.keys(): # my_dict.keys() 获取字典中的所有key

    # 根据key获取对应的value值
    value = my_dict[key]

    print(key, value)

#########  运行结果  ############

name 小明
age 18
sex 男
address 北京

遍历字典中的所有value

my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}

for value in my_dict.values():
    print(value)

#########  运行结果  ############

小明
18
男
北京

遍历字典中的所有项(item)

my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}

for item in my_dict.items():
    # 遍历的每项数据是一个元组类型,元组里面存放的是key和value
    print(item, type(item))
    # 根据下标获取元组中的数据
    # 获取key
    key = item[0]
    value = item[1]
    print(key, value)

#########  运行结果  ############

('name', '小明') <class 'tuple'>
name 小明
('age', 18) <class 'tuple'>
age 18
('sex', '男') <class 'tuple'>
sex 男
('address', '北京') <class 'tuple'>
address 北京

遍历的每项数据是一个元组,使用不同变量保存元组中的每一个数据,这里是操作是拆包:

my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}

for key, value in my_dict.items():
    print(key, value)

#########  运行结果  ############

name 小明
age 18
sex 男
address 北京

扩展: 直接遍历字典,默认取的是字典的key

my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}

for key in my_dict:
    print(key)

#########  运行结果  ############

name
age
sex
address

enumerate函数的使用

enumerate函数:当使用for循环遍历数据时,又想使用数据对应的下标又想使用数据就可以使用enumerate函数了。

如果不使用 enumerate 函数想要遍历数据时又获取下标又获取数据,就需要设置一个变量存放下标:

my_list = ["a", "b", "c"]

# 记录当前数据的下标
index = 0
for value in my_list:
    print(index, value)
    index += 1

#########  运行结果  ############

0 a
1 b
2 c

使用enumerate函数就会方便很多:

my_list = ["a", "b", "c"]

for item in enumerate(my_list): # enumerate(my_list)表示又取下标又取数据
    # 遍历的每项数据是一个元组
    print(item)

#########  运行结果  ############

(0, 'a')
(1, 'b')
(2, 'c')

遍历的每项数据是一个元组,对元组进行拆包处理:

my_list = ["a", "b", "c"]

for index, value in enumerate(my_list):
    print(index, value)

#########  运行结果  ############

0 a
1 b
2 c

结合break语句使用:

my_list = ["a", "b", "c"]

for index, value in enumerate(my_list): # enumerate(my_list)表示又取下标又取数据
    print(index, value)

    if index == 1:
        break

#########  运行结果  ############

0 a
1 b

扩展: enumerate可以结合列表,字符串,元组,字典

例如,enumerate结合字典:

my_dict = {"name": "小明", "age": 18, "sex": "男", "address": "北京"}

for index, item in enumerate(my_dict.items()):
    if index == 2:
        break
    # 利用拆包,获取元组中的每项数据
    key, value = item
    print(key, value)

#########  运行结果  ############

name 小明
age 18

enumerate结合字符串:

my_str = "hello"

for index, value in enumerate(my_str):
    print(index, value)

#########  运行结果  ############

0 h
1 e
2 l
3 l
4 o

字典的使用练习题:一个学校,有3个办公室,现在有8位老师等待工位的分配,请使用字典编写程序,完成随机的分配

import random

# 1. 三个办公室,办公室是可以容纳老师的,所以每一个办公室就是一个小列表
# my_list1 = []
# my_list2 = []
# my_list3 = []

# 办公室列表,里面的每个元素表示一个办公室,每个办公室还是一个列表
office_list = [[], [], []]

# 2. 8位老师,可以定义一个老师列表,存储8位老师
teacher_list = ["刘老师", "王老师", "郭老师", "马老师", "牛老师", "杨老师", "朱老师", "侯老师"]

# 3. 依次获取老师列表中的每一位老师,然后把老师随机分配到指定办公室
for teacher in teacher_list:

    # 生产随机数字,随机数字就是办公室的下标
    index = random.randint(0, 2)

    # 根据生产的下标获取对应的办公室
    office = office_list[index]

    # 把老师添加到随机的办公室里面
    office.append(teacher)

# 遍历办公室列表,获取每一个办公室
for index, office in enumerate(office_list):
    # 查看每一个办公室,每个办公室是一个列表

    num = index + 1
    # 获取办公室老师的个数
    count = len(office)
    print("第%d个办公室总人数为:%d人" % (num, count))

    # 遍历办公室,获取每一个老师信息
    for teacher in office:
        # 查看每一个老师的信息
        print(teacher)

    num += 1

#########  运行结果  ############

第1个办公室总人数为:2人
王老师
朱老师
第2个办公室总人数为:3人
郭老师
马老师
侯老师
第3个办公室总人数为:3人
刘老师
牛老师
杨老师

黑马程序员Python45期基础课上课笔记

上一篇下一篇

猜你喜欢

热点阅读