python笔记05元组、字典以及集合

python笔记05元组、字典以及集合

(1).元组

元组是一种不可变序列,一旦定义其内部值就无法改变。

>>> tu1 = (1,2,'3',7.6)
>>> tu1
(1, 2, '3', 7.6)

元组的索引,切片操作和字符串类似

>>> tu1[2]
'3'
>>> tu1[::-2]
(7.6, 2)
>>> tu1[1:3]
(2, '3')

一样的左闭右开不要忘了奥

元组还可以,加,乘,count(),index(),len(),min(),max()

>>> tu1=(1,2,3,4,5,6)
>>> tu1
(1, 2, 3, 4, 5, 6)
>>> tu2 = tu1 + (2,4,1,3)
>>> tu2
(1, 2, 3, 4, 5, 6, 2, 4, 1, 3)
>>> tu3 = tu2*3
>>> tu3
(1, 2, 3, 4, 5, 6, 2, 4, 1, 3, 1, 2, 3, 4, 5, 6, 2, 4, 1, 3, 1, 2, 3, 4, 5, 6, 2, 4, 1, 3)
>>> tu3.count(6)
3
>>> tu3.index(3)
2
>>> len(tu3)
30
>>> min(tu3)
1
>>> max(tu3)
6

tuple不可以添加或者修改其内部值,从上面的代码中就可以看到想要向元组中添加元素就要用定义新的元组。

>>> tu1[3] = '12'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

已经定义的元组是无法改变的,更详细的说是元组的内部第一层值无法改变。既然这样说第二层是什么意思,怎么又可以变了哪?

别急我们来看代码

>>> tu1
(1, 2, 3, 4, 5, 6)
>>> tu2 = tu1 + (1,[2,4,6])
>>> tu2
(1, 2, 3, 4, 5, 6, 1, [2, 4, 6])
>>> tu2[-1][-1] = 'abc'
>>> tu2
(1, 2, 3, 4, 5, 6, 1, [2, 4, 'abc'])

也就是说,元组内部的元素可以是可变的类型。

还有元组虽然不可以用sort排序和reverse反转,但是想要实现这样的功能使用内建函数就可以做到。

>>> sorted(tu1)
[1, 2, 3, 5, 6, 8, 12]
>>> list(reversed(tu1))
[8, 12, 6, 3, 5, 2, 1]

这里也体现了元组的不可变性,使用类内建函数后它的输出值是列表,而不是原先的元组。

当然列表和元组之间是可以相互转化的

>>> tu2 = (1,3,4,2,5)
>>> print(list(tu2))
[1, 3, 4, 2, 5]
>>> print(tuple(list(tu2)))
(1, 3, 4, 2, 5)

2.字典

字典数据类型是基于哈希算法实现的,采用键值对(key:value)的形式,根据key的值计 算value的地址,具有非常快的查取和插入速度。

字典的索引的方法

>>> dic1 = {1:'one',2:'two',3:'three'}
>>> dic1[1]
'one'
>>> dic1[2]
'two'
>>> dic1[4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 4
>>> dic2 = {'one':1,'two':2,'three':3}
>>> dic2['one']
1

可以看到如果访问了错误的key值会报错,

所以建议使用.get()即使使用了错误的key值,只会返回default值(默认是None,不过可以修改)。

字典使用get()函数

>>> print(dic1.get('one'))
None
>>> print(dic1.get('one','没有找到'))
没有找到

创建字典的几种方法

>>> dic1 = dict(one=1,two=2,three=3)
>>> dic2 = {'one':1,'two':2,'three':3}
>>> dic3 = dict(zip(['one','two','three'],[1,2,3]))
>>> dic1 == dic2 == dic3
True

个人感觉第三个挺关键的,能把两个列表变成字典,应该很有实用性

字典中key值是不可变也必须是不可变对象,value值是可以变的,也可以是可变对象

>>> dic1['one']=43
>>> dic1
{'one': 43, 'two': 2, 'three': 3}
>>> dic1['one']=[1,2,3]
>>> dic1
{'one': [1, 2, 3], 'two': 2, 'three': 3}

使用clear()函数来清空字典

clear()可以用来清空一个字典,注意是清空不是删除

>>> dic1.clear()
>>> dic1
{}

使用pop()函数来弹出字典内的元素

字典使用pop()要有key参数

>>> dic1.pop('one')
[1, 2, 3]
>>> dic1
{'two': 2, 'three': 3}

注意:字典的pop里面没有参数是会报错的

使用update()函数更新字典

>>> dic1
{'two': 2, 'three': 3}
dict1.update(on=12)
dict1
{'two': 2, 't': 4, 'on': 12}

查看字典内的元素

>>> dic1.keys()
dict_keys(['two', 'three'])
>>> dic1.values()
dict_values([2, 3])
>>> dic1.items()
dict_items([('two', 2), ('three', 3)])

3.集合

集合是一个无序不重复元素的集,因为它的不重复性,它可以用来去重。

>>> set1 = {1,3,4,4,4,4,2,3,6,2,8,9,0}
>>> set1
{0, 1, 2, 3, 4, 6, 8, 9}

因为集合是无序的所以像是索引和切片都不能用

>>> set1[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

集合的初始化

>>> set1 = {1,3,4,4,4,4,2,3,6,2,8,9,0}
>>> lis1 = [1,2,4,5,234,3,2]
>>> set2 = set(lis1)
>>> set2
{1, 2, 3, 4, 5, 234}  

集合内元素的添加以及删除

>>> set1.add(1)
>>> set1.add(90)
>>> set1
{0, 1, 2, 3, 4, 6, 8, 9, 90}
>>> set1.add([12,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

添加元素有两点要是注意

  • 一是可以添加里面已经有的元素数据,但是它不会变化。
  • 二是集合是可变的,但是其内部元素不能是可变对象。

(下一篇博文我会讲一下什么是可变对象,什么是不可变对象)

接下来看删除操作

>>> set1
{0, 1, 2, 3, 4, 6, 8, 9, 90}
>>> set1.remove(1)
>>> set1
{0, 2, 3, 4, 6, 8, 9, 90}
>>> set1.pop()
0
>>> set1.pop()
2
>>> set1
{3, 4, 6, 8, 9, 90}

remove可以设定删除指定的值,而pop是随机弹出的要注意。

最后再讲一下好用的update

>>> set1.update('wow')
>>> set1
{3, 4, 6, 8, 9, 'o', 'w', 90}

可以直接插入字符串。

笔记先记到这里,后续还会更新,

如果有写错的地方,文不达意的地方,请多多指教,谢谢啦

加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值