Python基础数据类型3(第六讲)

在这里插入图片描述

元组(tuple)

1.元组介绍(掌握)

    元组也是 序列结构,但是是一种 不可变序列,你可以简单的理解为内容不可变的列表。除了在内部元素不可修改的区别外,元组和列表的用法差不多。

  • 元组消耗的内存比列表少
  • 当元素不需要发生改变推荐使用元组
  • 当元素需要发生改变推荐使用列表

2.元组创建(掌握)

    创建一个元组,只要把 逗号 分隔的 不同的数据元素 使用 小括号 括起来即可。

tu = (1, 2, 3, 4)

    除此之外,我们还可以直接通过 tuple() 来进行创建元组。

print(tuple('1231224')) # ('1', '2', '3', '1', '2', '2', '4')

3.元组与列表相同的操作(熟悉)

  • 使用 方括号加下标 访问元素
tu = (1, 2, 3, 4)
print(tu[0]) # 1
  • 切片(形成新元组对象)
tu = (1, 2, 3, 4)
print(tu[0:3]) # (1, 2, 3)
  • tuple.count() / tuple.index()
tu = (1, 2, 3, 4, 4, 4, 4, 4, 4)
print(tu.count(4)) # 6;求这个元素出现的次数
print(tu.index(4)) # 3:求这个元素最小的索引位置
  • python内置函数:reversed(),sorted()
tu = (1, 2, 4, 5, 3, 6, 8, 7)
print(tuple(reversed(tu))) # (7, 8, 6, 3, 5, 4, 2, 1);反转
tu = (1, 2, 4, 5, 3, 6, 8, 7)
print(sorted(tu)) # [1, 2, 3, 4, 5, 6, 7, 8];排序
  • 加法及乘法
tu = (1, 2, 3, 4)
tu_2 = (5, 6, 7)
print(tu + tu_2) # (1, 2, 3, 4, 5, 6, 7)

tu = (1, 2)
print(tu * 2) # (1, 2, 1, 2)

4.元组中不允许的操作(熟悉)

  • 不允许 修改新增 元素。(一级)
  • 不允许 删除 某个元素(但可以删除整个元组)
        实际上,元组没有任何会对内部元素发生 修改 动作的方法。例如,元组没有remove,append,pop 等方法

5.元组与列表之间的转换(掌握)

  • list --> tuple ; tuple(iterable)
tu = (1, 2, 3)
print(list(tu)) # [1, 2, 3]
  • tuple --> list ; list(iterable)
li = [1, 2, 3]
print(tuple(li)) # (1, 2, 3)

字典(dict)

1.字典的创建(掌握)

    Python 的字典数据类型是基于 hash 散列算法实现的,采用 键值对 (key:value) 的形式,根据 key 的值计算 value 的地址,具有非常快的查取和插入速度。它是一种 可变对象 ,所以支持修改、插入、删除等操作。

2.字典创建(掌握)

  • dict()
  • dict(**kwargs) 键值对
  • dict(mapping) 映射
# dict()
PersonalInformation = {'name':'Jeff', 'age':18}PersonalInformation = {'name':'Jeff', 'age':18, 'hobbit':['play game', 'study python']}

# dict(**kwargs)
dic = dict(name='jeff', age=18)

# dict(mapping)
dic = dict[('name', 'jeff'), ('age', 18)]

    注意:

  • 创建字典;元素不限;值可以为任意类型;key值只能是不可变数据类型
  • 在 Python3.6 开始,字典对象会保持键值插入时的 顺序 ,并且其包含的 元素个数不限值的类型 也可以是其它任何数据类型
  • 字典的 key 必须是 不可变的对象,例如整数、字符串、bytes 和元组,但使
    用最多的还是字符串。 列表、字典、集合等就不可以作为 key。同时,同一个字典内的 key 必须是唯一 的(重复则覆盖),但值则不必。

6.字典创建(拓展)

  • map(func,*iterables):
    将 iterables 里面的元素逐个传到 func 里面做处理
# 需求:list('1234') --> [1,2,3,4]
# map:映射;将li中的每一个元素都映射到int中,再返回
li = list('1234')
print(list(map(int, li))) # [1, 2, 3, 4]
  • zip(iter1 [,iter2 […]]):
    将iter1 iter2 中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

# li_k = ['name','age'] 与 li_v = ['amy' , 18] 怎么组合成 键值对 的字典?
# zip:打包;将可迭代对象一一对应,打包成元组,进行返回
li_k = ['name', 'age']
li_v = ['amy', 18]
# print(zip(li_k, li_v)) #<zip object at 0x000001F33BC5BB48> zip类型
print(dict(zip(li_k, li_v))) # {'name': 'amy', 'age': 18}

7.访问字典(掌握)

    字典是 集合类型,不是序列类型,因此 没有索引下标 的概念,更 没有切片 的说法。但是,与 list 类似,字典采用把 相应的键 放入 方括号 内获取 对应值
方式取值
    如:dic[exit_key]

dit = {'name': 'Jeff', 'age': 18}
print(dit['name'])

    思考:当 key 值不存在时,程序会怎么样呢?

dit = {'name': 'Jeff', 'age': 18}
print(dit['asdf']) # 当key值不存在则报错

8.字典的增加与修改(掌握)

  • 增加 就是往字典 插入新的键值对
dit = {'name':'Jeff'}
dit['age'] = [18]
print(dit) # {'name': 'Jeff', 'age': [18]}
  • 修改 就是给 原有的键赋予新的值。由于一个 key 只能对应一个值,所以,多次对一个 key 赋值,后面的值会把前面的值 覆盖 掉。
dit = {'name':'Jeff'}
dit['age'] = [18]
print(dit) # {'name': 'Jeff', 'age': [18]}
dit['age'] = [20]
print(dit) # {'name': 'Jeff', 'age': [20]}

9.一系列删除(掌握)

  • 删除字典元素:del dic[exit_key] 或dic.pop(exit_key)
dit = {'name': 'Jeff', 'age': [20]}
del dit['name'] # 单独删除某个元素
  • 删除整个字典:del dic
dit = {'name': 'Jeff', 'age': [20]}
del dit# 删除整个字典
  • 清空整个字典:dic.clear()
dit = {'name': 'Jeff', 'age': [20]}
dit.clear()

10.字典常见操作(熟悉)

  • D.get(k[,d]) --> 返回指定键的值,如果值不在字典中,则返回default值
dit = {'name': 'Jeff', 'age': [20]}
print(dit.get('name')) # 跟方括号直接获取的结果一样,但是获取不存在的值时,不会报错
  • D.items() --> 以列表返回可遍历的(键, 值) 元组对
dit = {'name': 'Jeff', 'age': [20]}
print(dit.items())
  • D.keys() --> 以列表返回字典所有的键
dit = {'name': 'Jeff', 'age': [20]}
print(dit.keys())

  • D.values() --> 以列表返回字典所有的值
dit = {'name': 'Jeff', 'age': [20]}
print(dit.values())

3.作业

作业一

lis_1 = [‘name’, ‘author’, ‘introduce’]
lis_2 = [‘NORWEGIAN WOOD’, ‘haruki Murakami’, ‘balabalabalabalabala’]
将lis_1和lis_2以键值对的形式呈现

lis_1 = ['name', 'author', 'introduce']
lis_2 = ['NORWEGIAN WOOD', 'haruki Murakami', 'balabalabalabalabala']
print(dict(zip(lis_1, lis_2)))

作业二

Amy_info={‘name’:‘amy’, ‘addr’:‘hunan’, ‘weight’:90}获取Amy_info的key和value

import random

num = input('生成多少个:')
num_1 = 1
if str.isdigit(num):
    if float(num) <= 1000:
        while num_1 <= int(num):
            a = random.randint(0, 1000)
            print(a)
            num_1 += 1
    else:
        print('请输入小于一千的数')
else:
    print('请输入全数字')

作业三(扩展)

生成了N个1~1000之间的随机整数(N <= 1000),N是用户输入的,对于其中重复的数字只保留一个,把其余相同的数字去掉,然后把这些数从小到大排序。(注意此处需要用到随机整数,可了解random模块的具体方法;for循环,range()函数等结合使用,作为预习)

import random

num = input('生成多少个:')
num_1 = 1
b = set()
if str.isdigit(num):
    if float(num) <= 1000:
        while num_1 <= int(num):
            a = random.randint(0, 1000)
            b.add(a)
            num_1 += 1
    else:
        print('请输入小于一千的数')
else:
    print('请输入全数字')
print(b)

作业四

  • 字节如何转换字符
s = '123'
print(s.encode())
  • 字符如何转换字节
s = b'123'
print(s.decode())

作业五

总结数据类型哪些为可变,哪些为不可变。

  • 数值类型(不可变)
  • 布尔类型(不可变)
  • 字符串类型(不可变)
  • bytes数据类型(不可变)
  • 元组(不可变)
  • 集合(可变)
  • 列表(可变)
  • 字典(可变)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值