【保姆级入门系列】阿ken教你学Python(六) ——组合数据类型_组合数据类型中的转向用户重新选择

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

Python 中常见的列表操作函数与方法具体如下表所示。

列表的常见操作

常见操作说明
len(s)计算序列 s的长度(元素个数)
min(s)返回序列 s中的最小元素
max(s)返回序列 s中的最大元素
list.append()在列表的末尾添加元素
list.extend()在列表中添加另一列表的元素,与 +=功能相同
list.insert(i)在列表索引为 i的元素之前插入元素
list.pop(i)取出并删除列表中索引为 i的元素
list.remove()删除列表中第一次出现的元素
list.reverse()将列表的元素反转
list.clear()删除列表中的所有元素
list.copy()生成新列表,并拷贝原列表中的所有元素
list.sort()将列表中的元素排序

多学一招: 列表和数组的区别
接触过其他语言 (比如C语言)的读者可能听说过数組这个类型。在很多編程
语言中都使用数组存储一组数据,而少数的编程语言采用列表这个类型。数组与列表
非常类似,但是并不完全一样,它们两个主要有以下区别。
(1) 数组在创建时需分配大小,它的大小是固定的,只能容纳有限的元素;列表无需预先分配大小,它可以在使用时动态地插入任意数量的元素。
(2) 数组和列表都可以存储任意类型的元素,但是数组要求元素的类型必须一致,也就是说所有元素要么都是数字类型,要么都是字符串或其它类型。列表则没有这个要求,它可以存储不同整数、浮点数、宇符串、甚至列表。

6.2.3 元组

Python 构建元组的方式非常简单,可以直接用圆括号包含多个使用逗号隔开的元素即可。非空元组的括号可以省略。创建元素的示例如下:

() # 创建一个空元组
()
1, # 由逗号结尾表示元组
(1, )
(1, ) # 单个元素的元组
(1, )
1, 2, 3 # 包含多个元素的元组
(1, 2, 3)
(1, 2, 3) # 包含多个元素的元组
(1, 2, 3)

通过 tuple()函数也可以构造元组,该函数的定义如下:

tuple(iterable)

tuple() 函数中的参数 iterable是一个可迭代( [dié dài] 意为更替。)的数据。使用 tuple()函数创建元组时,若没有传入任何参数,则创建的是一个空元组,例如:

tuple() # 创建空元组
()

使用 tuple()函数创建非空元组,具体示例如下:

tuple([1, 2, 4]) # 创建非空元组
(1, 2, 4)
tuple('python') # 创建非空元组
('p', 'y', 't', 'h', 'o', 'n')

元组类型在表达固定数据、函数多返回值、多变量同步赋值、循环遍历等情况下是十分有用的,例如:

def get_square(x):
···  return x, x*x # 函数返回多个值
···
x, y = 10, 20 # 多个变量同步赋值
x, y = (10, 20)
for x, y in((10, 20), (10, 25), (15, 25)): # 循环遍历元组
...  print(x, y)
···
10 20
10 25
15 25

6.3 实例 8:生成验证码

🐮**阿ken:**目前,很多网站都引入了验证码技术,以有效地防止用户利用机器人自动注册、登录、灌水、刷票、恶意破解密码等。验证码一般是包含一串随机产生的数字或符号、一些干扰元素 (如数条直线、若干圆点、背景图片等)的图片。用户使用肉限观察验证码、输入其中的数字或符号并提交给网站验证。

常见的 6位验证码示例如下:

kK64ul eOGpUz 3JfS81

以上验证码中每个字符可以是大写字母、小写字母或数字,有且只能是这三种类型的一种,具体生成哪种类型的宇符是随机的。本节将实现随机生成一组六位验证码的功能。
六位验证码功能需随机生成6个字符,将每个字符临时存储到某数据结构中。因此,本实例用到的数据结构需有可变、有顺序的特点,显然选用列表存储是最待合要求的。通过列表实现六位验证码功能的基本实现思路为:
(1) 创建一个空列表
(2) 生成 6个随机字符逐个添加到列表中。
(3) 将列表元素拼接成字符串。

以上思路中的步骤 (2)是验证码功能的核心部分,此部分主要实现生成 6个随机字符的功能。为确保每次生成的字符类型只能为大写字母、小写字母、数字的任一种,可使用 1、2、3分别代表这三种类型:若产生随机数1,表示生成大写字母;若产生随机数2,表示生成小写字母;若产生随机数3,表示生成数字。
除此之外,为确保每次生成的是大写字母、小写字母或数字类型中的字符,这里可根据数值范围或ACSII 码范围控制每个类型中包含的所有字符:数字对应的数值范围为 0~9;大写字母对应 ACSII码范围为 65 ~ 90;小写字母对应的 ACSII码范围为 97~122,之后再从这些字符中随机选择一个字符即可。
经过以上两次处理,便可以生成一个随机类型中的随机字符实现生成验证码功能的代码具体如下:

import random
code list = []
for 1 in range(6): # 控制验证码的位数
state random randint(1, 3) # 随机生成的字符分类
if state ==1
first kind random randint (65, 90) # 大写字母
random uppercase chr(first kind)
code list append(random uppercase)
elif state == 2:
second kinds= random randint(97,122) # 小写字母
random lowercase chr(second kinds
code list append (random lowercase)
elif state = 3:
third kinds =random, randint(0, 9) # 数字
code list append(str(third kinds)
verification code =mjoin(code list) # 将列表元素连接成字符串
print (verification code)

程序运行一次的结果为:

MbGLwX

6.4 集合类型

6.4.1 集合的常见操作

集合使用 “{ }” 包含元素,各个元素之间使用逗号进行分隔。创建集合最简单的方式是使用赋值语句例如:

set_demo = {100, 'word', 10.5} # 创建集合
set_demo
{'word', 10.5, 100}

上述集合定义时元素的顺序与打印时元素的顺序是不同的,说明集合中的元素是无序的。
还可以使用 set()函数进行创建集合,该函数中可以传入任何组合数据类型,例如:

set_one = set('tuple')
set_one
{'u', 't', 'e', 'l', 'p'}
set_two = set((13, 15, 17, 19))
set_two
{17, 19, 13, 15}

注意,空集合只能使用 set()函数进行创建。
集合是可变的数据类型,集合中的元素可以被动态地增加或删除。

集合的常见操作

常见操作说明
S.add(x)往集合 S中添加元素x(x不属于S)
S.remove(x)若x在集合S中,则删除该元素,不在则产生 KeyError异常
S.discard(x)若x在集合S中,则删除该元素,不在则不会报错
S.pop()随机返回集合 S中的一个元素,同时删除该元素。若 S为空,则产生 KeyError异常
S.clear()删除集合 S中的所有元素
S.copy()返回集合 S的一个副本
S.isdisjoint(T)若集合 S和 T中没有相同的元素,则返回True

假设有一个集合为 {10,151, 33, 98, 57},分别使用add()、remove()、pop()和 clear()方法给集合添加和删除元素,示例如下:

 set_demo=(10,151,3398,57) # 创建集合
 set_demo. add (61) # 向集合中添加元素61
 set_demo
 {33, 98, 10, 151, 57, 61}
 set_demo.remove(151) # 从集合中删除元素 151
 set_demo
 {33, 98, 10, 57, 61}
 set_demo.pop() # 从集合中随机删除一个元素
 set_demo
 {98, 10, 57, 61} # 删除集合中的所有元素
 set_demo.clear()
 set_demo
 set()

6.4.2 集合关系测试

数学中,两个集合关系的常见操作包括:交集、并集、差集、补集。设A,B是两个集合,集合关系的操作介绍如下。
(1) 交集是指属于集合 A且属于集合B的元素所组成的集合。
(2) 并集是指集合 A和集合 B的元素合并在一起组成的集合。
(3) 差集是指属于集合 A但不属于集合 B的元素所组成的集合。
(4) 补集是指属于集合 A 和集合 B但不同时属于两者的元素所组成的集合。
Python 中集合之间支持前面所介绍的 4种操作,操作逻辑与数学定义完全相同。
Python 提供了 4种操作符以实现这4项操作,分别是交集(&)、并集(|)、差集(-)、补集(^)。下面以两个圆形表示集合 A和 B,并使用阴影部分显示 4种操作的结果,

除此之外,Python还提供了 4个增强操作符 :|=、-=、&=、^=,它们与前面 4个操作符的区别是,前者是生成了 一一个新的集合,而后者是更新了位于操作符左侧的集合。接下来通过一张表罗列集合 S和 T之间关系的常见操作,

集合间的常见操作

常见操作说明
S/T S.union(T)返回一个新集合,该集合包含属于S和 T的所有元素
S-T S.difference(T)返回一个新集合,该集合包含属于集合 S但不属于集合 T的元素
S&T S.intersection(T)返回一个新集合,该集合包含同时属于集合 S 和 T的元素
S^T S.symmetric_difference(T)返回一个新集合,该集合包含集合 S和 T中的元素,但不包含同时属于两者的元素
Sl=T S.update(T)更新集合 S,该集合包含集合 S和 T所有的元素
S-=T S.difference_update(T)更新集合 S,该集合包含属于集合 S但不属于集合T的元素
S&=T S.intersection_update(T)更新集合 S,该集合包含同时属于集合 S和 T的元素
S^=T S.symmetric_difference_ update(T)更新集合S,该集合包含集合S和 T中的元素,但不包含同时属于两者的元素

假设有集合a={1, 11, 21, 31, 17}和集合b={0, 11, 20, 17, 30},它们执行取交集、并集、差集、补集的示例如下:

a={1, 11,21,31,17}
b={0,11,20,17,30}
a|b # 取a和b的并集
{0, 1, 11, 17, 20, 21, 30, 31}
a-b # 取a和b的差集
{1, 21, 31}
a&b # 取a和b的交集
{17, 11}
a^b # 取a和b的补集
{0, 1, 20, 21, 30, 31}

对于两个集合 A与 B,如果集合A中的所有元素都是集合B的元素,那么集合 B包含集合A,也就是说集合A是集合B的子集,集合B是集合A的超集;如果集合 A中的所有元素都是集合B中的元素,且集合B中至少有一个元素不属于集合 A,那么集合A是集合B的真子集,集合B是集合A的真超集。
Python 中使用的比较运算符可以用来检查某个集合是否为其他集合的子集或者超集,其中,“<”或者“<=”运算符用于判断真子集和子集,“>”和“>=”运算符用于判断的是真超集和超集。需要注意的是,“<”和“>”运算符支持的是严格意义定义的子集和超集,它们不允许两个集合相等;而“<=”和“>=”运算符支持的是非严格意义定义的子集和超集,它们允许两个集合是相等的。例如:

set_one = set('what')
set_two = set('hat')
set_one < set_two # 判断set_one是否为 set_two的严格子集
False
set_one > set_two # 判断set_one是否为set_two的严格超集
True

6.5 字典

6.5.1 字典类型介绍

提到字典这个词,相信大家都不会陌生,学生时期碰到不认识的字时,大家都会使用字典的部首表找到对应的汉字说明。在编程中,通过“键”查找“值”的过程称为映射。字典是典型的映射类型,其中存放的是多个键值对。键值对的概念在实际生活中也比较常见,例如,在学生管理系统中搜索学生的姓名查找该学生的详细信息。
Python 中使用“()”包含键值对以创建字典,字典中各个元素之间通过逗号分隔。
语法格式如下:

{键1:值1, 键2:值2, ······键N:值N}

字典中的键与值之间以冒号分隔,长度没有限制。从语法设计角度来看,集合和字典均使用花括号包含元素,实际上集合与字典也有着相似的性质,它们之中的元素都没有顺序且不能重复。

下面创建一个存储多组账号密码信息的字典,代码如下:

users = {'A': '123','B': 135', 'C':'680'}
users
{'A': '123', 'B': '135','C': 1680'}

使用 " 字典变量[键] " 的形式可以查找字典中与 " 键 " 对应的值。例如,访问上述字典 users中键 " C " 所对应的值:

users['C'] # 访问键对应的值
'680'

字典中的元素是可以动态修改的,一般使用如下方法进行修改:

值 = 字典变量[键]

例如,对上述字典 users中键“A”对应的值进行修改,如下所示:

users['A'] = '1*5@'  # 修改键对应的值
users
{'A':'1*5@', 'B':'135', 'C':'680'}

6.5.2 字典的常见操作

通过操作键的方式除了可以修改和访问字典中的元素,还可以增加字典的元素,例如:

contacts = {'Tom'; '123456', 'Jerry':'456789'}
contacts
{'Tom':'123456', 'Jerry':'456789'}
contacts['Jane'] = '789012'
contacts
{'Tom': '123456', 'Jerry':'456789', 'Jane': '789012'}

Python 为字典提供了一些很实用的内建:方法,使用这些方法可以帮助读者在工作中应对涉及字典的问题,简化开发的步骤。此外,Pvthon中还提供了一些字典的常见操作,

字典的常见操作

常见操作说明
d.keys()返回字典 d中所有的键信息
d.values()返回字典 d中所有的值信息
d.items()返回字典 d中所有的键值对信息
d.get(key[,default])若键存在于字典 d中返回其对应的值。否则返回默认值
d.clear()清空字典
d.pop(key[,default])若键存在于字典 d中返回其对应的值.同时删除键值对,否则返回默认值
d.popitem()随机删除字典 d中的一个键值对
del d[key]删除字典 d中的某键值对
len(d)返回字典 d中元素的个数
min(d)返回字典 d中最小键所对应的值
max(d)返回字典 d中最大键所对应的值

通过 keys(). vabues()和item()方法可以返回字典中键、值和键值对的信息,这里可以使用 for循环遍历这些信息,例如:

 dic = {'name': 'Jack', 'age':23, 'beight’:185}
 dic.keys()
 dict_keys(['name', 'age', 'height'])
 dic.values()
 dict_values(['Jack', 23, 185])
 for key, value in dic.items():
 ...print(key, value)
 ...
 name Jack
 age 23
 height 185

Python 支持使用保留字 in来判断某个键是否存在于字典中,如果键存在,则返回 True,否则返回 False。例如:

'name' in dic
 True
'gender' in dic
 False

6.6 中文分词模块 ——jieba

🐮**阿ken叽里呱啦:**随着汉语的广泛应用,中文信息处理成为一个重要的研究课题,常见于搜索引擎、信息检索、中外文自动翻译、数据挖掘技术、自然语言处理等领域。在处理中文信息的过程中,中文分词是最基础的一环。
中文分词是指将一个汉字序列切分成一个一个单独的词,也就是说将用户输入的中文语句或语段拆成若干汉语词汇。例如,用户输人的语句 “我是一个学生”经分词系统处理之后,该语句被分成“我”“是”“一个”“学生”4个汉语词汇。
在英文文本中,每个单词之间以空格作为自然分界符,而中文只有句子和段落能通过明显的分界符来简单划分,词并没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,但是在词这一层上,中文要比英文复杂得多、困难得多。

jieba 是国内使用人数最多的中文分词工具,可以采用如下方式进行安装:

 pip install jieba

安装完之后,通过 import语句将其引入:

import jieba

jieba 模块支持以下3种分词模式:
(1) 精确模式,试图将句子最精准地切开。
(2) 全模式,将句子中所有可以成词的词语都扫描出来,速度非常快。
(3) 搜索引擎模式,在精确模式的基础上对长词再次切分。

jieba 模块中提供了一系列分词函数,常用的是 jieba.cut() 函数,该函数需要接收如下 3个参数。
(1) sentence,需要分词的字符串。
(2) cut all,控制是否釆用全模式。若设为True,代表按照全模式进行分词;若设为 False,代表按照精确模式进行分词。
(3) HMM,控制是否使用 HMM( Hidden Markov Model,隐马尔可夫模型)
若要采用搜索引擎模式对中文进行分词,需要使用 cut for search()函数,该函数中需要接收两个参数: sentence 和 HMM。

下面分别采用以上 3种模式对中文进行分词操作,代码如下:


seglist = jieba cut("我来到北京清华大学", cut_all=True)
print("[全模式]:"+"/"·join(seg_list)) # 全模式
seg_1ist = jieba.cut("我来到北京清华大学", cuta11=Fal.se)
print("[精确模式]:"+"/".join(seg_1st) # 精确模式
seg_1ist= jieba cut for search("小明硕士毕业于中国科学院计算所, 后在日本京都大学深造") # 搜索引擎模式
print("[搜索引擎模式]:"+"," .join(seg_list))

程序输出的结果如下:

【全模式】:我/来到/北京/清华/清华大学/华大/大学
【精确模式】:我/来到/北京/清华大学
【搜索引擎模式】:小明,硕士,毕业,于,中国,科学,学院,科学院,中国科学院,计算,计算所,后,在,日本,京都,大学,日本京都大学,深造

6.7 阿ken 总结

🐮**阿ken:**本章主要讲解了组合数据类型:序列类型、集合类型和映射类型,首先讲解了序列类型的内容,包括切片操作、列表和元组的创建及一些基本操作;其次讲解了集合类型,包括集合的基本操作和集合关系测试;然后讲解了映射类型 ——字典,包括字典类型的介绍和字典的常见操作;最后讲解了中文分词模块 ——jieba。通过本章的学习,希望读者能够掌握各种数据类型的特点,并在实际编程中熟练使用各种类型存储数据。

以前我总是会特别注意身边人的感受

所以总是活的非常累

也为此耽误了很多东西

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

够掌握各种数据类型的特点,并在实际编程中熟练使用各种类型存储数据。

以前我总是会特别注意身边人的感受

所以总是活的非常累

也为此耽误了很多东西

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-VLYYbX1x-1713355912250)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值