基本数据类型
字符串
Python 中并没有像 C++ 那样的字符类型(char),所有的字符都被统一成了 str 对象。即使是单个字符 c,它的类型也是 str。
str 类型是高频使用的类型,这里先列举 5 个例子。
strip 用于去除字符串前后的空格:
In [1]:' SAGA Site'.strip()
Out [1]:'SAGA Site'
replace 用于字符串的替换:
In [2]:'SAGA Site'.replace(' ', '_')
Out [2]:'SAGA_Site'
join 用于合并字符串:
In [3]:'_'.join(['SAGA', 'Site', 'Python'])
Out [3]:'SAGA_Site_Python'
title 用于单词的首字母大写:
In [4]:'saga site'.title()
Out [4]:'Saga Site'
find 用于返回匹配字符串的起始位置索引:
In [5]:'I love python'.find('python')
Out [5]:7
举个应用字符串的案例,判断 str1 是否由 str2 旋转而来。
字符串 stringbook 和 bookstring,写一段代码验证 str1 是否为 str2 旋转得到。
转化为判断:str1 是否为 str2+str2 的子串。
下面函数原型中,注明了每个参数的类型、返回值的类型以增强代码的可读性和可维护性。
def is_rotation(s1: str, s2: str) -> bool:
if s1 is None or s2 is None:
return False
if len(s1) != len(s2):
return False
def is_substring(s1: str, s2: str) -> bool:
return s1 in s2
return is_substring(s1, s2 + s2)
测试函数 is_rotation:
r = is_rotation('stringbook', 'bookstring')
print(r) # True
r = is_rotation('greatman', 'maneatgr')
print(r) # False
字符串的匹配操作除了使用 str 封装的方法外,Python 的 re 正则模块功能更加强大,写法更为简单,广泛用于怕中、数据分析等。
下面这个案例实现:密码安全检查,使用正则表达式非常容易实现。
密码安全要求:
- 要求密码为 6 到 20 位;
- 密码只包含英文字母和数字。
import re
pat = re.compile(r'\w{6,20}')
# 这是错误的,因为 \w 通配符匹配的是字母,数字和下划线,题目要求不能含有下划线
# 使用最稳的方法:\da-zA-Z 满足“密码只包含英文字母和数字”
# \d 匹配数字 0-9
# a-z 匹配所有小写字符;A-Z 匹配所有大写字符
pat = re.compile(r'[\da-zA-Z]{6,20}')
选用最保险的 fullmatch 方法,查看是否整个字符串都与规则相匹配。
以下的测试返回例子为 None,原因见注释。
pat.fullmatch('qaz12') # 返回 None,长度小于 6
pat.fullmatch('qaz12wsxedcrfvtgb67890942234343434')
# 返回 None,长度大于 22
pat.fullmatch('qaz_231') # 返回 None,含有下划线
下面这个字符串 n0passw0Rd 完全符合:
In [20]: pat.fullmatch('n0passw0Rd')
Out [20]: <re.Match object; span=(0, 10), match='n0passw0Rd'>