点击上方“潜心的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 set, len(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官方文档.

往期精彩回顾
扫码关注更多精彩



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

被折叠的 条评论
为什么被折叠?



