在讲字符串之前,先了解两个pycharm常用的快捷键:
Ctrl + D :快速复制光标所在行的内容到光标所在行的下一行Ctrl + Y :快速删除光标所在行的内容Ctrl + / :对选中的代码行进行注释,会在所选代码行前快速加#(需要提前选中要注释的代码)字符串类型是 Python 里面最常见的类型。 可以简单地通过在引号间(单引号,双引号和三引号)包含字符的方式创建它。
例如:第一种方式: str1 = 'our company is westos'
第二种方式: str2 = "our company is westos"
第三种方式: str3 = """our company is westos"""
在这里尤其要注意这个三引号,三引号在pycharm中有两个作用:
1)定义多行字符串:为避免使用转义换行符 \n,通常会用在定义SQL语句的表达式中没有变量的时候使用。
例如:
2)进行多行注释:Python中单行注释是#,多行注释的时候每行都写一个#,或者采用连续的三个双引号。
例如:
在打印字符串时,可能会碰到不可打印的字符串,这时就需要用到转义符号。
转义符号:一个反斜线加一个单一字符可以表示一个特殊字符,通常是不可打印的字符。
下面是几个经常会用到的转义字符总结:
例如:
* 删除字符和字符串(了解)
字符串是不可变的,只能通过赋一个空字符串或者使用 del 语句来清空或者删除一个字符串,但是没有必要显式的删除字符串。定义这个字符串的代码结束时会自动释放这些字符串。
1)连接符( + ), 重复操作符( * ),计算长度
连接操作符: 从原有字符串获得一个新的字符串,用 ‘+’ 将两个要连接的字符串连接起来。
重复操作符: 创建一个包含了原有字符串的多个拷贝的新串,用 ‘*’ 后加数字表示重复的次数。
计算长度:用len( )函数可以计算字符串的长度。
例如:
2)序列操作符(索引与切片)
索引(s[i] ):获取特定偏移的元素。字符串中的每一个字符都对应着一个索引值,直接输入索引值就可以输出对应的字符。索引分为正向索引和反向索引两类,正向索引下第一个字符的索引值为0,反向索引下最后一个字符的索引值为-1。
例如:
# 索引 str = 'abcd hello' # 正向索引 print(str[0]) print(str[2]) print(str[3]) # 反向索引 print(str[-1])输出结果为:
切片S[i:j]:提取对应的部分作为一个序列。这个序列以第i个字符开始,到第 j-1 个字符结束。
如果没有给出切片的边界,切片的下边界默认为0,上边界为字符串的长度;扩展的切片S[i:j:k],其中i,j含义同上,k为递增步长;s[:]获取从偏移量为0到末尾之间的元素,是实现有效拷贝的一种方法;s[::-1]是实现字符串反转的一种方法。例如:
3)成员操作符(in ,not in)
成员操作符用于判断一个字符或者一个子串(中的字符)是否出现在另一个字符串中。
出现则返回 True,否则返回 False。
例如:
4)string 模块预定义的字符串:
总结一些常用的如下:
① string.ascii_letters 所有的字母(大小写都有)
打印结果:'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
② string.ascii_lowercase 所有的小写字母
打印结果:'abcdefghijklmnopqrstuvwxyz'
③ string.ascii_uppercase 所有的大写字母
打印结果:'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
④ string.digits 所有的数字
打印结果:'0123456789'
⑤ string.whitespace 所有的空白符
打印结果:'\t\n\x0b\x0c\r
⑥ string.punctuation 所有的特殊字符
打印结果:'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
下面有一个实际案例来综合应用以上的内容知识
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
参考代码如下:
import string str = input("请输入验证的字符串:") if len(str) == 0: print(True) else: # 将字符串转成小写字母, 忽略大小写; str = str.lower() # 创建一个变量cleanStr, 保存清洗过后的字符串; cleanStr = '' # 依次遍历所有的字符串元素 for item in str: # 判断是否为字母或者数字, 如果是,加入到cleanStr; if item in string.ascii_letters + string.digits: cleanStr += item print("清洗后的字符串:", cleanStr) # 判断是否为回文字符串, 正向和反向读取内容相同,即回文. print(cleanStr == cleanStr[::-1])结果示例1:
结果示例2:
1)字符串的判断与转换
示例:
>>> s='hello' >>> s.lower() 'hello' >>> s.upper() 'HELLO' >>> s.title() 'Hello' >>> s = 'Hello WoRld' >>> s.swapcase() 'hELLO wOrLD' >>> s.capitalize() 'Hello world' >>> s.title() 'Hello World' >>> s 'Hello WoRld' >>> s.isalnum() False >>> s = 'hello' >>> s.isalnum() True >>> s.istitle() False >>> s = 'Hello' >>> s.istitle() True >>> s = 'Hello world' >>> s.istitle() False >>> s = '' >>> s.isspace() False >>> s = ' ' >>> s.isspace() True >>> s = '\t' >>> s.isspace() True注意:
.title: 标题需要每一个首字母大写,e.g. Hello Python
.space: 这里的空格指的是广义的空格, e.g: \n, \t
2)字符串的开头和结尾匹配
示例:
>>> filename = 'hello.py' >>> filename.endswith('.py') True >>> url = 'http://www.westos.org' >>> url.startswith('http') True3)字符串的数据清洗
示例:
>>> username = input('Username:') Username:root >>> username == 'root' False >>> 'root '.rstrip() 'root' >>> username = input('Username:').rstrip() Username:root >>> username == 'root' True >>> '\n\thello\n\t'.strip() 'hello' >>> s = 'hello world jdjdfjsf jfjf' >>> s.replace(' ', '') 'helloworldjdjdfjsfjfjf' >>> s.replace('he', 'westos') 'westosllo world jdjdfjsf jfjf'4)字符串的位置调整
示例:
>>> s = "学生管理系统" >>> s.center(50) ' 学生管理系统 ' >>> s.center(50, '*') '**********************学生管理系统**********************' >>> s.center(50, '-') '----------------------学生管理系统----------------------' >>> s.ljust(50, '-') '学生管理系统--------------------------------------------' >>> s.rjust(50, '-') '--------------------------------------------学生管理系统'5)字符串的搜索,统计
示例:
>>> s = 'hello python hello java' >>> s.find('hello') 0 >>> s.find('llo') 2 >>> s.find('llo', 6) 15 >>> s.find('llokk') -1 >>> s.index('hello') 0 >>> s.count('hello') 26)字符串的分离与拼接
# 分割 ip = '172.25.254.250' # 以.为分隔符进行分割; print(ip.split('.')) # 打印结果为['172', '25', '254', '250'] # 以.为分隔符进行分割;最多切割1次; print(ip.split('.', maxsplit=1)) #打印结果为 ['172', '25.254.250'] filename = 'hello.py' print(filename.split('.')) # 按行进行分割 info = """ user1: user1 user2: user2 user3: user3 user4: user4 """ # 以空格(\t, \n, \ )进行分割 print(info.split()) # 以\n进行分割; print(info.splitlines()) # 组合 ips = ['172', '25', '254', '250'] # 将ips里面的每个元素拼接在一起, 拼接符为.; print(".".join(ips)) print("-".join(ips))结果截图:
7)其他的内置方法
cmp() 根据字符串的 ASCII 码值进行比较(py3取消)
len() 返回字符串的字符数
max() and min() 返回最大或者最小的字符,(按照 ASCII 码值排列)
enumerate() 枚举对象同时列出数据和数据下标
zip() 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表