学习日记08(元组、字典、集合)

Python学习日记08(元组、字典、集合)

列表(上期内容补充)

列表的嵌套

​ 由于列表中存储的是可变化的数据类型,所以当我们把一个列表当作元素存入列表中时,列表的嵌套也就完成了。

a = ['上海', '北京', '深圳', '广东']
b = ['乌海', '呼伦贝尔']
a.append(b)
print(a)

输出结果:
['上海', '北京', '深圳', '广东', ['乌海', '呼伦贝尔']]

​ 当在使用列表嵌套时,只需要将嵌套的列表当作大列表中的一个元素进行操作即可。

列表的推导式

​ 所谓的列表推导式,就是指的轻量级循环创建列表。

#   生成一个0-9的列表
#	for循环写法
num = []
for i in range(0,10):
    num.append(i)
print(num)

#	列表推导式写法
num2 = [j for j in range(0, 10)]
print(num2)

输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

列表的复制

a = 12
b = a
b = 13
print(b)
print(a)

nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1
nums2[0] = 100
print(nums2)
print(nums1)

输出结果:
13
12
[100, 5, 8, 9, 10, 12]
[100, 5, 8, 9, 10, 12]

​ 在python中的赋值运算都是引用(即内存地址)。对于可变 类型而言,修改源数据的值,会改变赋值对象的值。

copy模块的使用
  • 列表的copy函数

    ​ 使用列表的copy函数,可直接将列表进行复制,编程一个全新的列表,这种赋值方法就式浅拷贝

nums1 = [1, 5, 8, 9, 10, 12]
nums2 = nums1.copy()  # 调用列表的copy方法,可以复制出一个新的列表
nums2[0] = 100
# 修改新列表里的数据,不会影响到原有列表里的数据
print(nums2)
print(nums1)

输出结果:
[100, 5, 8, 9, 10, 12]
[1, 5, 8, 9, 10, 12]

​ 除了使用列表的copy函数外,Python还提供了copy模块来复制对象。copy模块提供了浅拷贝和深拷贝两种复制方法,虽然他们的使用方式相同,但在执行效果上又具有一定的差距。

  • 浅拷贝

    ​ 浅拷贝是对于对象的顶层拷贝,拷贝了对象的引用,而没有拷贝内容。

import copy

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']

# 浅拷贝只会拷贝最外层的对象,里面的数据不会拷贝,而是直接指向
words2 = copy.copy(words1)

words2[0] = '你好'
words2[2][0] = 'no'

print(words1)  # ['hello', 'good', ['no', 'ok'], 'bad']
# wrods2 里的 yes 被修改成了 no
print(words2)  # ['你好', 'good', ['no', 'ok'], 'bad']

输出结果:
['hello', 'good', ['no', 'ok'], 'bad']
['你好', 'good', ['no', 'ok'], 'bad']

​ 可以看出来在对列表中的可变类型进行重新赋值时,源列表中的可变类型也发生了变化,而对于列表中的不可变量重新赋值时,源列表并未发生改变。

  • 深拷贝

    ​ 不同于浅拷贝,深拷贝是对于一个对象所有层次的递归拷贝。

import copy

words1 = ['hello', 'good', ['yes', 'ok'], 'bad']

# 深拷贝会将对象里的所有数据都进行拷贝
words2 = copy.deepcopy(words1)

words2[0] = '你好'
words2[2][0] = 'no'

print(words1)  # ['hello', 'good', ['yes', 'ok'], 'bad']
print(words2)  # ['你好', 'good', ['no', 'ok'], 'bad']

输出结果:
['hello', 'good', ['yes', 'ok'], 'bad']
['你好', 'good', ['no', 'ok'], 'bad']

​ 深拷贝完全形成两个列表。

  • 切片

    列表和字符串类似,也支持切片,而切片的本质也是浅拷贝。

元组

​ python中元组和列表类似,但是元组的元素是不可进行修改的。

元组的定义

​ 元组使用()进行定义。
​ 当需要定义一个只有一个元素的元组时,需要在唯一元素后加,

atuple = ('python','2109.56')
btuple =  ('java',)

元组的特性

​ 元组中的元素是不可修改的,所以“增删改”在元组中并不存在。

字典

​ 虽然列表可以存储任意的数据类型,但是当存储的元素含义较为丰富,具有不同的意义时,列表就不能很好的体现数据间的差异了。

​ 针对列表的劣势,字典可以很好的处理不同含义的数据间的存储。

  • 列表更适合存储具有相同性质的数据,如多个名字
  • 字典更适合存储一类相同事务的不同属性。

字典的定义

​ 在字典中,数据以**键值对(key:velue)**的形式进行存储,使用{}进行定义。

person = {'name': 'zhangsan', 'age': 18}

字典的特性

  • 字典和列表一样可以存储多个数据

  • 字典中的键值(key)唯一的,若出现多个key值,后续出现的value会覆盖掉之前key对应的value

  • key:value是一对多关系

  • 键值(key)可以使用数字、布尔、元组等不可变数据类型,但一般使用字符串。

  • 字典可以通过键值(key)进行查询相关联的值(value)

字典的操作

查看字典元素
  • 单一元素的查询

​ 除了使用指定key值进行数据查询外,get()也是一种方法。

atuple = {'name': 'lisa', 'age': 18}
print(atuple['name'])
print(atuple.get('name'))

输出结果:
lisa
lisa

​ 注意:获取字典的默认值不会对字典内进行修改。

  • 字典的遍历

    • 遍历字典中的key(键)
    atuple = {'name': 'linshiyu', 'age': 18}
    for key in atuple.keys():
        print(key)
        
    输出结果:
    name
    age
    
    • 遍历字典中的value
    atuple = {'name': 'linshiyu', 'age': 18}
    for value in atuple.values():
        print(value)
        
    输出结果:
    linshiyu
    18
    
    • 遍历字典中的项(元素)
    atuple = {'name': 'linshiyu', 'age': 18}
    for item in atuple.items():
        print(item)
    
    输出结果:
    ('name', 'linshiyu')
    ('age', 18)
    
    • 遍历字典中的key:value(键值对)
    atuple = {'name': 'linshiyu', 'age': 18}
    for key,value in atuple.items():
        print(f'key= {key}, value= {value}')
        
    输出结果:
    key= name, value= linshiyu
    key= age, value= 18
    
添加字典元素

​ 代码格式:字典名['key'] = 'value'

​ 当使用添加语句时,如果key值在字典中不存在,那么字典会新增这个键值对

atuple = {'name': 'linshiyu', 'age': 18}
atuple['address'] = '上海'
print(atuple)

输出结果:
{'name': 'linshiyu', 'age': 18, 'address': '上海'}

删除字典元素

​ python提供了两种删除字典的方法

  • del方法 指定删除字典中的键,当键消失时它所对应的value值也会消失;也可以删除整个字典(包括字典名)
info = {'name':'班长', 'id':100}
print('删除前,%s' % info)
del info['name']  # del 可以通过键删除字典里的指定元素
print('删除后,%s' % info)

输出结果:
删除前,{'name': '班长', 'id': 100}
删除后,{'id': 100}

  • clear()函数 清空字典
info = {'name':'monitor', 'id':100}
print('清空前,%s'%info)
info.clear()
print('清空后,%s'%info)

输出结果:
清空前,{'name': 'monitor', 'id': 100}
清空后,{}

修改字典

​ 修改字典中的元素,就是修改字典中键值对key:velue中的value值。

atuple = {'name': 'linshiyu', 'age': 18}
atuple['age'] = 25
print(atuple)

输出结果:
{'name': 'linshiyu', 'age': 25}

集合

​ 集合(set)是一个无序的不重复元素的序列,可以使用{}set()函数进行创建。

​ 字典和集合都是用到{},但定义一个空集合时只能使用set();

{}代表一个空字典

集合常用函数

方法描述
add()为集合添加元素
clear()移除集合中的所有元素
copy()拷贝一个集合
pop()随机移除元素
remove()移除指定元素
union返回两个集合的并集
update()给集合添加元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值