2020-11-10


1 元组(tuple)

元组是一种不可变序列。无法通过取索引修改元素。
一般情况下,当希望数据不改变的时候,使用元组,其余情况下都使用列表。

1.1 创建元组

语法:

变量 = (元素1,元素2,...)
# 括号内可以为空

在这里插入图片描述
我们可以通过取索引的方式输出元组内的元素,但是不能修改。

在这里插入图片描述
在这里插入图片描述
TypeError: ‘tuple’ object does not support item assignment
类型错误:“tuple”对象不支持项分配

如果元组不是空的,则元组内至少得有一个,

例:

tup = 10
print(tup, type(tup)) # 输出tup,此时为整型
tup = 10, # 修改tup,在原先的基础上加上,
print(tup, type(tup)) # 输出tup,此时变为tuple

执行结果:
在这里插入图片描述
这种方式也同样适用于 str 类型数据。

1.2 元组的解包

概念:将元组中的每一个元素赋值给变量。

tup = 10, 20, 30, 40
a, b, c, d = tup # 将tup中的值分别赋予a,b,c,d
print(a, b, c, d) 

执行结果:
在这里插入图片描述
注:解包时,变量的个数需要等于元组内元素的个数,否则报错:
小于时:ValueError: too many values to unpack (expected 2)
值错误:太多的值无法解包(应为2)
大于时:ValueError: not enough values to unpack (expected 5, got 4)
指错误:没有足够的值来解包(应为5,得到4)

在这里插入图片描述
在这里插入图片描述

如果变量个数无法与元组的元素个数保持一致,可以在任意一个变量前加上*,剩余的元素将以列表的形式返回到加了 * 的变量中。
例:

tup = 10, 20, 30, 40, 50, 60
a, b, *c = tup # 变量不够,在c前面加 *
print(f'a = {a}, b = {b}, c = {c}')

执行结果:
在这里插入图片描述


2 可变对象

一般而言,对象当中保存了三个数据。分别是:

  • id(标识)
  • type(类型)
  • value(值)

可变对象指的是对象中的value可以被改变。

我们以a = [1,2,3] 为例。

代码:

a = [1, 2, 3] 
print(a, id(a)) # 输出列表a和a的id
a[0] = 10 # 修改列表a中索引值为0的元素
print(a, id(a)) # 输出修改后的a和id

执行结果
在这里插入图片描述
通过以上的操作我们可以得出:像a[0] = 10的这种修改列表的方式只会修改对象的值,而不会修改变量的值。这里通过观察变量a的id在修改前后不变可以看出来。
在这里插入图片描述
在这里插入图片描述

代码:

a = [1, 2, 3]
print(a, id(a)) # 输出列表a的值和id
a = [10, 2, 3] # 通过向变量a重新赋值来改变a的值
print(a, id(a)) # 输出修改后的a和id

执行结果:
在这里插入图片描述
通过以上操作,我们又可以得出:像a = [10,2,3]的这种修改列表的方式,会改变变量的值。修改后,变量的id会发生改变。系统会为此开辟一个新的内存空间,用于保存新的对象。
在这里插入图片描述
总结: 列表是一种可变对象,像a[0] = 10是通过变量修改对象里面的值,但是不会改变变量指向的对象(依旧指向同一个对象)。而像a = [10,2,3]这种操作会改变变量所指向的对象(指向不同的对象)。


3 字典(dict)

概念:字典是一种数据结构,被称为映射(mapping)。
字典与列表类似,也是一种用来存储对象的容器。

区别:

  • 列表存储数据的性能很好,但是查询数据的性能差。
  • 字典中每一个元素都有唯一的key(键),通过key我们可以快速寻找指定的元素。相较于列表,字典存储性能较差,但查询数据性能好。

字典中的元素有key(键)和value(值),所以字典又称为键值对(key-value)结构。字典中可以有多个键值对,每一个键值对称为一个项(item)

语法:

变量 = {key1:value,
		key2:value,
		...}
# 与列表类似,字典也可以为空

在这里插入图片描述
字典的键尽量不要重复,否则键的值会被后来的值覆盖。

3.1 获取字典的元素

根据键获取
语法:

变量[key]
# key必须加引号,否则系统会将其作为变量处理

在这里插入图片描述

3.2 字典的使用

3.2.1 使用dict()创建字典

创建字典有两种方式:

  • 直接使用{}
  • 使用dict()函数

语法:

变量 = dict{key1 = value, key2 = value, ...}

在这里插入图片描述

dict()函数也可以将包含有双值子序列的序列转换为字典。如:
代码:

a = dict([('name','葫芦娃'),
		  ('age',10),
		  ('sex','男')])
print(a)

执行结果:
在这里插入图片描述
Q:什么是双值子序列?

A:双值序列:指序列中只有2个值,例如:'ab'[1,,4]('a','b')
子序列:序列中的元素也是序列,则称这个元素为子序列。

结合以上两个概念,双值子序列:指的就是序列中的元素都是子序列,同时每个子序列中只有两个值。例如:[('a',1),('b',2),('c',3)]

3.2.2 使用get()获取字典的值

我们除了通过key获取字典的值外,还可以通过get()获取字典的值。
语法:

字典.get(key,[default])
# default为未找到key时显示的值,可省略

用key获取字典的值时,如果没有找到key,则会报错:
KeyError:‘name1’

在这里插入图片描述

但是,如果使用get()获取时,如果没找到key,不会报错,而是会返回None,如果定义了default,则会返回default值。

在这里插入图片描述

3.2.3 修改字典
  • 通过key修改k-v

语法:

字典[key] = value

在这里插入图片描述
如果没有找到对应的key,则会在字典末尾加上k-v。
在这里插入图片描述

  • setdefault()方法添加k-v
    语法:
字典.setdefault(key,value)

在这里插入图片描述
如果key在字典中已经存在,则返回key的值,不对字典做任何操作。

  • update()将其他字典中的k-v添加到当前字典中
    语法:
字典1.update(字典2)

在这里插入图片描述
如果有重复的key,则后面的会覆盖前面的。

  • del关键字删除k-v
    语法:
del 字典[key]
  • popitem()随机删除字典中的k-v

删除之后,会将删除的value作为返回值返回。

语法:

字典.popitem()
  • pop()根据key删除k-v
    语法:
字典.pop(key,[default])
# 在没有找到key时,会返回default作为返回值

如果字典中没有要删除的k-v,且没有default,则会报错:
KeyError: ‘d’

在这里插入图片描述

  • clear()清空字典
    语法:
字典.clear()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值