「通过Docs学Python」(三)内置类型:文本、集合以及映射

本文深入讲解Python中的文本、集合及字典数据类型,包括str、set、frozenset和dict的特性与应用,以及常见操作如字符串格式化、去重、映射等,为Python学习者提供实用指南。

点击上方“潜心的Python小屋”关注我们,第一时间推送优质文章。

前言

大家好,我是潜心。这是「通过Docs学Python」的第三篇文章。看了看之前写的,发现讲一堆方法,然后每个举个例子这样好无聊,没有意义。这次加上我自己的经验,挑选了内置类型中某些经常用的方法或技巧。还有文章的阅读数真的好低啊,继续加油吧。

文本序列类型---str

在 Python 中处理「文本数据」是使用 str 对象,也称为字符串。字符串也可以通过使用 str 构造器从其他对象创建,但一般不这么做。字符串是由 Unicode 码位构成的「不可变序列」。字符串字面值有多种不同的写法:

  • 单引号:'允许包含有 "双" 引号';

  • 双引号:"允许包含有 '单' 引号";

  • 三重引号:'''三重单引号''', """三重双引号""",使用三重引号的字符串可以跨越多行 ;

>>> s1, s2 = 'a"bc"', "a'bc'"
>>> s3 = '''abc
... def'''
>>> s1, s2, s3
('a"bc"', "a'bc'", 'abc\ndef') # \n表示换行
>>> print(s3)
abc
def

字符串方法

字符串实现了上篇文章所说的「一般序列」操作。字符串方法实在太多,这里简要介绍常用的方法。

方法解释
find(sub, start, end)返回子字符串 sub切片内被找到的最小索引,无法找到返回-1
rfind(sub, start, end)返回子字符串 sub 在字符串内被找到的最大(最右)索引,无法找到返回-1
format(*args, **kwargs)执行字符串格式化操作。调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。
join(iterable)返回一个由 iterable 中的字符串拼接而成的字符串。
lower()返回原字符串的副本,其所有区分大小写的字符均转换为小写。
upper()返回原字符串的副本,其中所有区分大小写的字符均转换为大写。
strip([chars])返回原字符串的副本,移除其中的前导字符。 chars 参数为指定要移除字符的字符串。如果省略或为 None,则 chars 参数默认移除空格符。(一般只用作移除空格)
rstrip([chars])返回原字符串的副本,移除其中的末尾字符。 chars 参数为指定要移除字符的字符串。如果省略或为 None,则 chars 参数默认移除空格符。
replace(old, new, count)返回字符串的副本,其中出现的所有子字符串 old 都将被替换为 new。如果给出了可选参数 count,则只替换前 count 次出现。
split(sep=None, maxsplit=-1)返回一个由字符串内单词组成的列表,使用 sep 作为分隔字符串。如果给出了 maxsplit,则最多进行 maxsplit 次拆分(因此,列表最多会有 maxsplit+1 个元素)。
splitlines([keepends])返回由原字符串中各行组成的列表,在行边界的位置拆分。结果列表中不包含行边界,除非给出了 keepends 且为真值。
title()返回原字符串的标题版本,其中每个单词第一个字母为大写,其余字母为小写

注:

1、format(),字符串格式化,可以避免字符串很麻烦的拼接问题(你需要把整数转化为字符串),一般用在输出(但我基本不会用):

>>> "The sum of {0} + {1} is {2}".format(1, 2, 1+2)
'The sum of 1 + 2 is 3'

2、join()用到最多的地方是将列表字符转为字符串

>>> '  .  '.join(['1', '2', '3'])
'1  .  2  .  3'
>>> ''.join(['1', '2', '3'])
'123'

3、split()splitlines(),主要使用split这个方法很重要,数据处理会经常使用它来对字符串进行切割成列表(当然注意切割后的元素为字符串),另一个方法可能适合文本(我之前也不知道这个方法):

>>> '1,2,3,4,5,6'.split(',')
['1', '2', '3', '4', '5', '6']
>>> s.split('\n')
['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.']
>>> s.splitlines()
['Beautiful is better than ugly.', 'Explicit is better than implicit.', 'Simple is better than complex.']

除了以上常用的,还有其他判断字符是否为数字字母:isalnum(),是否为字母:isalpha(),是否为数字:isadigit()等,这些我用到的场合基本是「算法题」。

printf风格的字符串格式化

字符串具有一种特殊的内置操作:使用 % (取模) 运算符。这也被称为字符串的「格式化」或「插值运算符」。对于 format % values (其中 format 为一个字符串),在 format 中的 % 转换标记符将被替换为零个或多个 values 条目。如果 format要求一个单独参数,则 values 可以为一个非元组对象。

主要的转换类型为:

转换符含义
'd'有符号十进制整数。
'f'浮点十进制格式。小数点后的数码位数由精度决定,默认为 6。精度可以通过%.numf,num为精度。
'c'单个字符(接受整数或单个字符的字符串)。
's'字符串

相比format(),输出我更喜欢用这种方式:

>>> print('%s has %d quote types' % ('Python', 2))
Python has 2 quote types
>>> print('number: %.3f' % 3.3) 
number: 3.300

集合类型---set、frozenset

「set 对象」是由具有唯一性的hashable对象所组成的「无序多项集」(无序)。常见的用途主要是**「去重」**。

与其他多项集一样,集合也支持 x in setlen(set) 和 for x in set。作为一种无序的多项集,集合并不记录元素位置或插入顺序。相应地,集合不支持索引、切片或其他序列类的操作。

目前有两种内置集合类型,set 和 frozenset。 set 类型是可变的 --- 其内容可以使用 add() 和 remove() 这样的方法来改变。由于是可变类型,它「没有哈希值」,且不能被用作字典的键或其他集合的元素。 frozenset 类型是「不可变」并且为 hashable --- 其内容在被创建后不能再改变;因此它可以被用作字典的键或其他集合的元素。

除了可以使用 set 构造器,非空的 set (不是 frozenset) 还可以通过将以逗号分隔的元素列表包含于「花括号」之内来创建,例如: {'jack', 'sjoerd'}

主要是去重,一般set用的最多。

>>> l = [1, 2, 3, 4, 5, 5, 3, 2, 1]
>>> set(l)
{1, 2, 3, 4, 5}

映射类型---dict

mapping 对象会将 hashable 值映射到任意对象。映射属于可变对象。目前仅有一种标准映射类型:「字典」。

字典真的非常重要,map映射的思想在算法中有时候能降低算法的复杂度

「字典的键」几乎可以是任何值。 非 hashable 的值,即包含列表、字典或其他可变类型的值(此类对象基于值而非对象标识进行比较)不可用作键。

字典可以通过将以逗号分隔的 键: 值 对列表包含于花括号之内来创建,例如: {'jack': 4098, 'sjoerd': 4127}或 {4098: 'jack', 4127: 'sjoerd'},也可以通过 dict 构造器来创建:

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

字典主要支持的操作有:

操作解释
list(d)返回字典 d 中使用的所有键的列表。
len(d)返回字典 d 中的项数.
d[key]返回 d 中以 key 为键的项。如果映射中不存在 key 则会引发 KeyError
d[key] = value将 d[key] 设为 value。
del d[key]将 d[key] 从 d 中移除。如果映射中不存在 key 则会引发 KeyError
clear()移除字典中的所有元素。
copy()返回原字典的浅拷贝。
get(key[, default])如果 key 存在于字典中则返回 key 的值,否则返回 default。如果 default 未给出则默认为 None,因而此方法绝不会引发 KeyError
items()返回由字典项 ((键, 值) 对) 组成的一个新视图。
keys()返回由字典键组成的一个新视图。
values()返回由字典值组成的一个新视图。
pop(key[, default])如果 key 存在于字典中则将其移除并返回其值,否则返回 default。如果 default 未给出且 key 不存在于字典中,则会引发 KeyError
reverse(d)返回一个逆序获取字典键的迭代器。

1、get()方法可以来判断是否存在该键,一般会和「添加键值」一起用(这是字典中我用到最多的方法):

{'one': 1, 'two': 2, 'three': 3}
>>> d = {'one':1, 'two':2, 'three': 3}
>>> if d.get('four') is None:
...     d['four']=4
>>> d
{'one': 1, 'two': 2, 'three': 3, 'four': 4}

2、items()keys()values()返回的视图对象:

>>> type(d.keys())
<class 'dict_keys'>
>>> d.keys()
dict_keys(['one', 'two', 'three', 'four'])

3、有时候需要将字典的键值给反过来,生成一个新的字典:

(1)使用 zip()① 来创建 (值, 键) 对: pairs = zip(d.values(), d.keys())

>>> dict(zip(d.values(), d.keys()))
{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

(2)使用for循环

>>> {v:k for (k, v) in d.items()}
{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

其他内置类型

主要的(常用)内置类型就是:数字、序列、文本、集合、映射,其实二进制类型序列也是主要的,但是我不是经常用,所以没有放在这一块了,感兴趣的同学可以去Python标准库文档看一下,内容很多。除了这些之外,其他内置类型还有:「迭代器类型」(yield)、「上下文管理类型」(with语句)(这两个部分会放在下一期讲)、模块、类、函数、方法、类型对象(type)、空对象、布尔值等。

总结

这期主要讲述了文本序列类型、集合序列类型、字典序列类型。Python处理文本类型主要通过str对象,输出可以通过字符串格式化;集合类型主要的作用是去重;字典序列类型是mapping 对象会将 hashable 值映射到任意对象。下期应该会是一个番外,分享一下一些编程的小技巧,以及其他常用/好用的内置函数。感谢大家阅读,喜欢的给个关注好嘛!

【重点】现在潜心建了一个Python交流群,感兴趣的同学可以联系我。

内置函数

①zip

创建一个聚合了来自每个可迭代对象中的元素的迭代器。

返回一个「元组的迭代器」,其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。

zip()也是非常好用的一个内置函数,经常用来联合两个列表,使用时可以将其转化为其他序列:

>>> z = zip([1, 2, 3], [4, 5, 6])
>>> z
<zip object at 0x102290fc8>
>>> list(z)
[(1, 4), (2, 5), (3, 6)]

参考文献

[1] Python官方文档.

往期精彩回顾

「通过Docs学Python」(二)内置类型:数字与序列

「通过Docs学Python」(一)前言

爬虫基础知识(一)多线程与threading模块

爬虫实战(三)----使用百度API获取经纬度/地址

今日头条爬虫实战----爬取图片

哔哩哔哩爬虫实战----验证码识别

扫码关注更多精彩

【电能质量扰动】基于ML和DWT的电能质量扰动分类方法研究(Matlab实现)内容概要:本文研究了一种基于机器习(ML)和离散小波变换(DWT)的电能质量扰动分类方法,并提供了Matlab实现方案。首先利用DWT对电能质量信号进行多尺度分解,提取信号的时频域特征,有效捕捉电压暂降、暂升、中断、谐波、闪变等常见扰动的关键信息;随后结合机器习分类器(如SVM、BP神经网络等)对提取的特征进行训练与分类,实现对不同类型扰动的自动识别与准确区分。该方法充分发挥DWT在信号去噪与特征提取方面的优势,结合ML强大的模式识别能力,提升了分类精度与鲁棒性,具有较强的实用价值。; 适合人群:电气工程、自动化、电力系统及其自动化等相关专业的研究生、科研人员及从事电能质量监测与分析的工程技术人员;具备一定的信号处理基础和Matlab编程能力者更佳。; 使用场景及目标:①应用于智能电网中的电能质量在线监测系统,实现扰动类型的自动识别;②作为高校或科研机构在信号处理、模式识别、电力系统分析等课程的教案例或科研实验平台;③目标是提高电能质量扰动分类的准确性与效率,为后续的电能治理与设备保护提供决策依据。; 阅读建议:建议读者结合Matlab代码深入理解DWT的实现过程与特征提取步骤,重点关注小波基选择、分解层数设定及特征向量构造对分类性能的影响,并尝试对比不同机器习模型的分类效果,以全面掌握该方法的核心技术要点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值