字符串
在讲字符串之前,先了解两个pycharm常用的快捷键:
- Ctrl + D :快速复制光标所在行的内容到光标所在行的下一行
- Ctrl + Y :快速删除光标所在行的内容
- Ctrl + / :对选中的代码行进行注释,会在所选代码行前快速加#(需要提前选中要注释的代码)
1.字符串的创建和赋值
字符串类型是 Python 里面最常见的类型。 可以简单地通过在引号间(单引号,双引号和三引号)包含字符的方式创建它。
例如:第一种方式: str1 = 'our company is westos'
第二种方式: str2 = "our company is westos"
第三种方式: str3 = """our company is westos"""
在这里尤其要注意这个三引号,三引号在pycharm中有两个作用:
1)定义多行字符串:为避免使用转义换行符 \n,通常会用在定义SQL语句的表达式中没有变量的时候使用。
例如:
2)进行多行注释:Python中单行注释是#,多行注释的时候每行都写一个#,或者采用连续的三个双引号。
例如:
在打印字符串时,可能会碰到不可打印的字符串,这时就需要用到转义符号。
转义符号:一个反斜线加一个单一字符可以表示一个特殊字符,通常是不可打印的字符。
下面是几个经常会用到的转义字符总结:
例如:
* 删除字符和字符串(了解)
字符串是不可变的,只能通过赋一个空字符串或者使用 del 语句来清空或者删除一个字符串,但是没有必要显式的删除字符串。定义这个字符串的代码结束时会自动释放这些字符串。
2.字符串的基本特性
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:
3.字符串内建函数
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')
True
3)字符串的数据清洗
示例:
>>> 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')
2
6)字符串的分离与拼接
# 分割
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() 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表