基础自学Python编程7天快速入门 Day4

参考资料:b站视频

1. 数据类型-元组tuple

只读列表,一旦创建,不可修改。只可进行查询、切片、循环操作。

在这里插入图片描述

# 注意点 必须加逗号
>>> num =(1)
>>> type(num)
<class 'int'>
>>> num=(1,)
>>> type(num)
<class 'tuple'>
# 元组无法修改
>>> names = ('taohy','dabao')
>>> names
('taohy', 'dabao')
>>> names[1]='dadabao'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

2. 数据类型-字典dict

dict特性

1. key value的结构 {key1:value, key2:value2, key3:value3}
2. key必须是不可变数据类型(字符串、数字、元组)
3. key必须是唯一的
4. 一个key对应的value可以是任意数据类型
5. 可嵌套,value可以是dict
6. python3.7之前是无序的,之后是有序的 order_dict
7. 字典查询速度快、操作方便

dict增删改查

# 创建 一般用第一种方式

在这里插入图片描述

# 增
1. 直接给key赋值,如果未存在,新增;如果已存在,修改。
>>> people={"name":'taohy','age':30,'hobby':'swimming'}
>>> type(people)
<class 'dict'>
>>> people['isMarry']=False
>>> people
{'name': 'taohy', 'age': 30, 'hobby': 'swimming', 'isMarry': False}

2. 检查式新增,如果不存在,新增;如果已存在,返回对应的value。
>>> people
{'name': 'taohy', 'age': 30, 'hobby': 'swimming', 'isMarry': False}
>>> people.setdefault('name','aa')
'dabao'
>>> people.setdefault('job','developer')
'developer'
>>> people
{'name': 'dabao', 'age': 30, 'hobby': 'swimming', 'isMarry': False, 'job': 'developer'}
>>>

# 改
# 普通修改
>>> people
{'name': 'taohy', 'age': 18}
>>> people['name']='dabao'
>>> people
{'name': 'dabao', 'age': 18}

# 合并修改 把新的字典每个key更新到新的value
>>> people
{'name': 'dabao', 'age': 18}
>>> oldpeople={'age':80,'name':'laobao','job':'retired'}
>>> oldpeople
{'age': 80, 'name': 'laobao', 'job': 'retired'}
>>> people.update(oldpeople)
>>> people
{'name': 'laobao', 'age': 80, 'job': 'retired'}
>>>
# 查
# get方法 不存在的话返回None
>>> people
{'name': 'taohy', 'age': 60, 'job': 'developer'}
>>> people.get('hobby')
>>> print(people.get('hobby'))
None

#直取  不存在的话会报错
>>> people['hobby']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'hobby'


# 判断是否在dict里面 对应的key判断
>>> people
{'name': 'taohy', 'age': 60, 'job': 'developer'}
>>> 'name' in people
True
>>> 'hobby' in people
False
# 删
# names.pop('key')  删除key不存在的报错 
>>> people
{'name': 'taohy', 'age': 60, 'job': 'developer'}
>>> people.pop('hobby')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'hobby'
>>> people.pop('age')
60

#  del names['key'] 不存在key报错
>>> people
{'name': 'taohy', 'job': 'developer', 'age': 30}
>>> del people['age']
>>> del people['hobby']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'hobby'

# names.popitem() 以LIFO最后进来先删除 一对数
>>> people['age']=30
>>> people
{'name': 'taohy', 'age': 30}
>>> people.popitem()
('age', 30)
>>> people
{'name': 'taohy'}

# 清空
>>> people.clear()
>>> people
{}
所有keys
所有values
所有items
>>> people
{'name': 'taohy', 'age': 30, 'job': 'developer'}
>>> people.keys()
dict_keys(['name', 'age', 'job'])

>>> people.values()
dict_values(['taohy', 30, 'developer'])

>>> people.items()
dict_items([('name', 'taohy'), ('age', 30), ('job', 'developer')])

>>> for k,v in people.items():  print(k,v)
...
name taohy
age 30
job developer

dict循环

for k in dict.keys()
for v in dict.values()
for k,v in dict.items()
for k in dict  # 推荐的方法

>>> for k in people:print(k,people[k])
...
name taohy
age 30
job developer

dict 特殊方法

# fromkeys 批量生成dict
>>> people=['taohy','dabao','xiaobao']
>>> print(people)
['taohy', 'dabao', 'xiaobao']
>>> dict.fromkeys(people,0)
{'taohy': 0, 'dabao': 0, 'xiaobao': 0}
>>> dict.fromkeys(people,'developer')
{'taohy': 'developer', 'dabao': 'developer', 'xiaobao': 'developer'}
# 求长度 len(info)
>>> len(people)
3

dict为何查询速度快

基于hashtable,查询速度O(1)

# 查找100 
方法一:
1. 先排序
2. 二分查找的方法

在这里插入图片描述

方法二 hashtable

>>> hash('taohy')
9011185021800041913
>>> hash('dabao')
2750307866407919365

在这里插入图片描述

dict练习题

# 1. 生成一个包含100的个key的字典,每个value的值不能一样

在这里插入图片描述

# 2. {'k0':0,'k1':1,'k2':2,'k3':3,'k4':4,'k5':5,'k6':6,'k7':7,'k8':8},请把字典中key大于5的value打印出来。

在这里插入图片描述

# 3. 把题2中value是偶数的统一改成-1

在这里插入图片描述

# 4. 把下面列表中的值进行分类,变成dict
input : test_list=[4,6,6,4,2,2,4,8,5,8]
output = {4:[4,4,4],6:[6,6],2:[2,2],8:[8,8],5:[5]}
需求:值一样的要分类存在一个key里

在这里插入图片描述

# 5. 把一段话里重复的单词去掉
input: Python is great and Java is also great
Output: is also Java Python and great

在这里插入图片描述

# 6. 写程序输出dict中values中唯一的值
dict = {'qfg':[5,6,7,8],'best':[6,12,10,8],'is':[10,11,7,5],'for':[1,2,5]}
结果:[1,2,5,7,8,10,11,12]

在这里插入图片描述

# 7. 把所有下表中同字母异序词找出来
arr = ['cat','dog','tac','act','god']
结果:[['cat','act','tac'],['god','dog']]

在这里插入图片描述

3. 数据类型-集合set

特性

在这里插入图片描述

语法


# 创建
>>> a= {3}
>>> type(a)
<class 'set'>

# 帮列表去重 最快速的方法,转换成集合,再转换成列表
>>> li = ['taohy','taohy','dabao']
>>> set(li)
{'dabao', 'taohy'}
>>> type(set(li))
<class 'set'>
>>> li_new = list(set(li))
>>> li_new
['dabao', 'taohy']

增 查 改 删

# 1. 增
>>> a.add(1)
>>> a
{1, 2, 3, 4}
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
# 2. 查
>>> a
{1, 2, 3, 4, 5}
>>> 5 in a
True
>>> 3 in a
True
# 3.改
一旦创建,不能修改
4. 删除
a.pop() # 随机删除
a.remove(3) # 删除指定值 如果不存在删除,报错
a.discard(3) # 删除指定值,如果不存在删除,不报错

>>> a
{2, 3, 4, 5}
>>> a.pop()
2
>>> a.remove(5)
>>> a
{3, 4}

>>> a
{3, 4}
>>> a.remove(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 5
>>> a.discard(5)
>>> a
{3, 4}
>>> a.discard(3)
>>> a
{4}

关系测试

# 交集 &
>>> dict_test1 = {1,2,3,4,5}
>>> dict_test2={1,5,6,2,8}
>>> dict_test1 & dict_test2
{1, 2, 5}

# 并集 |
>>> dict_test1 | dict_test2
{1, 2, 3, 4, 5, 6, 8}

# 差集 -
>>> dict_test1 - dict_test2
{3, 4}
>>> dict_test2 - dict_test1
{8, 6}
>>>
# 对称差集 ^
>>> dict_test2 ^ dict_test1
{3, 4, 6, 8}
# 子集 issubset
>>> dict_test1 = {1,2}
>>> dict_test2={1,2,3,4}
>>> dict_test1.issubset(dict_test2)
# 父集 issuperset
>>> dict_test1 = {1,2}
>>> dict_test2={1,2,3,4}
>>> dict_test2.issuperset(dict_test1)
True

4. 二进制运算

# 二进制转换成十进制
>>> int(0b0101)
5
# 十进制转换成二进制
>>> bin(3)
'0b11'

在这里插入图片描述

5. 初识编码

如何识别文字

# ASCII表
# ord 字符对应的十进制
>>> ord('a')
97
>>> ord('A')
65
>>> ord('v')
118

# Chr 十进制对应的字符
>>> chr(90)
'Z'
>>> chr(56)
'8'
>>> chr(133)
'\x85'  # 特殊字符

在这里插入图片描述

连续的字符怎么搞?

在这里插入图片描述

中文咋搞?gb2312 gbk gb18030

1980年 gb2312 包括 6763个汉字和682的字符 2个字节 代表一个中文

在这里插入图片描述

编码的战国时代 unicode

在这里插入图片描述

帝国统一后的新问题 UTF

UTF-8 :使用1,2,3,4个字节表示字符。最多4个字符。英文1个字节、欧洲语系2个、东亚3个、其他极特殊的字符占4个。
UTF-16
UTF-32

注意:UTF是为了unicode编码 设计的一种在存储和传输时节省空间的编码方案,他是Unicode的一种实现方式。

在这里插入图片描述

在这里插入图片描述
参考:
unicode官网:https://home.unicode.org/
unicode中文表:http://www.chi2ko.com/tool/cjk.htm

常用编码介绍一览表

在这里插入图片描述

python2和python3的编码

python2 默认是ASCII,报错,解决就得顶上加上标注encoding:utf-8来告诉py解释器。
python3是UTF-8。
windows系统默认的编码是gbk,导致打印出来是乱码。所以在windows顶上encoding:gbk来告诉py解释器。

在这里插入图片描述

6. 进制运算

# 十六进制
>>> hex(20)
'0x14'
>>> bin(0xe8)
'0b11101000'

7. 三元运算

# 简单写法
>>> age =18
>>> status = '成年' if age>18 else '未成年'
>>> status
'未成年'

在这里插入图片描述

# 三元嵌套

在这里插入图片描述

8. 作业

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡水瑜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值