1.字符串的表达方式
1.一对双引号、一对单引号、一对三个双引号、一对三个单引号中的数据,就是字符串
2.如果使用一对引号来定义字符串,当出现符号冲突时可以使用转义字符
2.如果使用一对引号来定义字符串,当出现符号冲突时可以使用转义字符
3.使用单引号、双引号定义的字符可以包裹任意文本
4.同样引号里面不可以包裹同样的引号
a = 'hello'
b = "good"
c = """呵呵呵"""
d = '''嘿嘿嘿'''
m = ' xiaoming said :"I am xiaoming"'
n = """ xiaoming said :"I am xiaoming" """
2.字符串里面的转义字符
\
表示的是转义字符,作用是对\
后面的字符进行转义
\'
:表示一个普通的单引号
``"`: 表示一个普通的双引号
\n
:表示一个换行
\t
:表示显示一个制表符,中间是四个空格
\ \
:表示一个普通\
符号
x = 'I\'m xiaoming '
y = 'hello \n world'
print(x, y)
在字符串的前面添加 r 在python里表示的是原生字符串
z = 'hello teacher'
k = 'hello \teacher'
j = r'hello \teacher'
print(z)
print(k)
print(j)
3.字符串的索引
字符串通过下标来获取或者修改指定位置的数据,字符串的下标从0开始。
注意:字符串是不可变的数据,对字符串的任何操作,都不会改变原有的字符串
world = "zhangsan"
print(world[4])
4.字符串的切片
切片就是从字符串里面复制一段指定的内容,生成一个新的字符串。
切片语法:str[start : end : step] 包头不包尾。
其中step指的是步长,即间隔。每隔step-1个取一次,步长默认为1,不能为0;可以是负数,负数表示从右往左切片。
m = 'abcdefghijklmnopkrstuvwxyz'
print(m[5]) //f
print(m[0:9]) //abcdefghi
print(m[23:]) //xyz
print(m[:9]) //abcdefghi
print(m[3:15:2])//dfhjln
print(m[15:3:-1])//ponmlkjihgfe
print(m[::]) //abcdefghijklmnopkrstuvwxyz
print(m[::-1])//zyxwvutsrkponmlkjihgfedcba
print(m[-9:-5])//rstu
注意:字符串从后往前数是从-1开始,但同样是包前不包后
5.获取字符串的长度
字符串里使用内置函数len获取字符串的长度
x = 'abcdefghijklmnhijklmn'
print(len(x))
6.字符串下标查找
可以用find/index/rfind/rindex获取指定字符串的下标
- find/index返回的是字符串下标的最小值;rfind/rindex返回的是字符串下标的最大值
- 查找字符时,若字符在字符串里不存在,find返回的结果时-1,index会报错
- rfind/rindex与find/index的用法一样
x = 'abcdefghijklmnhijklmn'
print(len(x))
print(x.find('l'))
print(x.index('l'))
print(x.find('p')) # -1 如果字符在字符串里不存在,结果是 -1
print(x.index('p')) # 使用index,如果字符不存在,会报错
print(x.find('l'), 4, 9) # 表示在下标4到下标9之间,找l
7.字符串计算次数
count:count函数属于内置函数,用于统计字符串中某个字符或者列表中某个元素出现的次数,返回值是一个整数。
str = "Hello, World!"
count = str.count("o")
print(count) # 输出结果:2
str = "I am learning Python and Python is a popular programming language."
word = "Python"count = str.count(word)
print(count) # 输出结果:2
8.字符串的替换
replace:用来替换字符串中指定的内容,如果指定次数count,则替换不会超过count次
my_str = '今天天气好晴朗,处处好风光呀好风光'
new_str = my_str.replace('好', '坏')
print(my_str)
print(new_str) # 今天天气坏晴朗,处处坏风光呀坏风光
new_str = my_str.replace('好', '坏', 2) # 指定了替换的次数
print(new_str)
9.字符串的分割
字符串分割:split/splitlines/partition/rpartition
**split:**以指定字符串为分隔符切片,如果maxsplit有指定值,则分割maxsplit+1个子字符串,返回结果是一个列表。
mystr = '今天天气好晴朗,处处好风光呀好风光'
result1 = mystr.split() # 没有指定分隔符,默认使用空格,换行等空白字符进行分隔
print(result1) #['今天天气好晴朗,处处好风光呀好风光']
# 没有空白符,所以字符串未被分隔
result2 = mystr.split('好') # 以 '好' 为分隔符
print(result2) #['今天天气', '晴朗,处处', '风光呀', '风光']
result3 = mystr.split('好', 2) # 以 '好' 为分隔符,最多分割成3份
print(result3) #['今天天气', '晴朗,处处', '风光呀好风光']
**rsplit:**用法和split基本一致,只不过是从右往左分隔
**splitlines:**按照三种换行符(‘\r’, ‘\r\n’, \n’)分隔,返回一个列表,列表中的字符串是每一行的内容。
语法:str.splitlines([keepends])
参数keepends:是否保留换行符,默认为False,则按行分割开的每一个字符最后不包含换行符’\r’, ‘\r\n’, \n’;如果为True,则在这些字符最后保留换行符’\r’, ‘\r\n’, \n’。
mystr = 'hello\nworld'
print(mystr.splitlines()) # ['hello', 'world']
str1 = 'ab c\n\nde fg\rkl\r\n'
print(str1.splitlines()) # ['ab c', '', 'de fg', 'kl']
str2 = 'ab c\n\nde fg\rkl\r\n'
print(str2.splitlines(True)) # ['ab c\n', '\n', 'de fg\r', 'kl\r\n']
如果想自定义分隔符,可以采用str.split(),在split后面的参数里输入想要以之分割的符号。
注意:行中的两个连续的\n中间是什么都没有的,但分割时会将它分割成一个空的字符,作为单独的一部分存储在列表中。
text = "Hello\n\nWorld\nWelcome"
lines = text.split('\n')
print(lines)
# ['Hello', '', 'World', 'Welcome']
**partition:**指定一个字符作为分隔符,将字符串分为三部分:前面 分隔符 后面。
**rpartition:**与partirion语法相同,但是从右侧分隔。
print('abcdefxhfgedxuot'.partition('x'))
# ('abcdef', 'x', 'hfgedxuot')
print('abcdefxhfgedxuot'.rpartition('x'))
# ('abcdefxhfged', 'x', 'uot')
10.字符串修改大小写
在python中字符串的大小写转换方法:capitalize/title/upper/lower
- 使用
lower()
方法,把所有大写字母转换成小写字母。 str.lower() - 使用
upper()
方法,把所有小写字母转换成大写字母 str.upper() - 使用
capitalize()
方法,仅第一个单词首字母转化为大写字母,其余小写字母 str.capitalize() - 使用
title()
方法,把每个单词的首字母转化为大写字母,其余为小写字母 str.title()
while True:
content = input('请输入内容,输入exit退出:')
print('您输入的内容是', content)
if content.lower() == 'exit':
break
11.字符串对齐处理
**ljust/rjust/center:**返回原字符串左对齐、右对齐以及居中对齐,不足的使用指定字符进行填充。
ljust :左对齐 语法:str.ljust(长度,填充字符)
rjust :右对齐 语法:str.rjust(长度,填充字符)
center :居中对齐 语法:str.center(长度,填充字符)
str1 = 'python'
print(str1.ljust(10, '.')) # python....
print(str1.rjust(10, '#')) # ####python
print(str1.center(10, '@')) # @@python@@
12.字符串删除空格
strip/lstrip/rstrip:用于删除字符串中的特定字符。
strip:默认情况下删除字符串开头和结尾的空格
lstrip:默认情况下删除字符串开头的空格
rstrip:默认情况下删除字符串结尾的空格
s = " hello world "
print(s.strip()) # 输出 "hello world"
print(s.lstrip())
print(s.rstrip())
- strip()方法可以接受一个参数,用于指定要删除的字符。例如,可以使用strip()方法删除字符串中的换行符和制表符。
s = "\n\t hello world \n\t"
print(s.strip("\n\t")) # 输出 "hello world"
- 当strip()方法接受一个参数时,该参数将指定要删除的字符。如果在字符串中间出现要删除的字符,则该字符不会被删除
s = "hello world"
s1 = "world hello"
print(s.strip("h")) # 输出 "ello world"
print(s1.strip('h')) # 输出 "world hello"
删除字符串中的所有空格
s = " hello world "
print(s.replace(" ", "")) # 输出 "helloworld"
以某种固定格式显示字符串中,我们可以将它切割成一个列表
x = 'zhangsan+lisi+wangwu+jack+tony+henry+chris'
names = x.split('+')
print(names)
# ['zhangsan', 'lisi', 'wangwu', 'jack', 'tony', 'henry', 'chris']
将列表转换为字符串
fruits = ['apple', 'pear', 'peach', 'banana', 'orange', 'grape']
print('-'.join(fruits))
print('*'.join('hello'))
# apple-pear-peach-banana-orange-grape
# h*e*l*l*o
13.字符串拼接
语法:‘连接符’.join(‘str’)
';'.join('abc') # 输出结果为:'a;b;c'
14.字符串运算
1.字符串和字符串之间能够运用加法运算符,作用是将两个字符串拼接成一个字符串,例如:‘hello’+‘world’ 的结果是’helloworld’
2.字符串和数字之间可以做乘法运算,结果是将指定的字符串重复多次,例如:‘hello’ * 2 的结果是’hellohello’
3.字符串和字符串之间秒如果使用比较运算符进行计算,会获取字符对应的编码,然后进行比较
4.字符串和数字之间做 == 运算,结果是False, 做!=运算,结果是True
5.除上述几种运算符之外,字符串默认不支持其他运算符
15.字符编码
字符集是一个字符的集合,例如ASCII字符集、Unicode字符集等。编码是将字符集中的字符映射到具体的数字或二进制表示的过程。常见的编码方案有ASCII、UTF-8、UTF-16等。
字符与数字编码存在一个对应的关系。使用内置函数chr和ord能够查看数字和字符的对应关系。
ord:获取字符对应的编码
chr:根据编码获取对应的字符
print(ord('a'))
print(chr(65))
**GBK:**国标扩,一个汉字占两个字节,简体中文
**BIG5:**繁体中文
**utf-8:**统一编码,汉字占三个字节
encode:可以将字符串转换成指定编码集结果
decode:可以将一个编码集转换成对应的字符
print('你'.encode('gbk'))
print('你'.encode('utf-8'))
x = b'\xe4\xbd\xa0'
print(x.decode('utf-8'))
Python 3.x 默认使用Unicode字符集,并且通常使用UTF-8编码来表示Unicode字符。
16.in 和 not in运算符
用来判断一个内容在可迭代对象里面是否存在
word = 'hello'
x = input('请输入一个字符:')
判断用户输入的字符在字符串里面是否存在
word = 'hello'
x = input('请输入一个字符:')
for c in word:
if x == c:
print('您输入的内容存在')
break
else:
print('您输入的内容不存在')
if word.find(x) == -1:
print('您输入的内容不存在')
else:
print('存在')
if x in word:
print('存在')
else:
print('不存在')
if x not in word:
print('不存在')
else:
print('存在')
17.字符串的格式化
1.可以使用 % 占位符来格式化一个字符串
%s ==> 表示的是字符串的占位符
%d ==> 表示的是整数的占位符
%nd ==>打印时,显示n位,如果不够,在前面使用空格补齐
%f ==> 表示的是浮点数的占位符
%.nf ==> 表示小数点后n位
%x ==> 将数字使用十六进制输出
name = 'zhangsan'
age = 18
print('大家好,我的名字是', name, '我今年', age, '岁了', sep=' ')
print('大家好,我的名字是%s,我今年%d岁了,我今天挣了%f元钱' % (name, age, 3.14))
print('大家好,我是%3d号男嘉宾' % 5)
print('大家好,我是%-3d号男嘉宾' % 5)
print('大家好,我是%03d号男嘉宾' % 5)
# 大家好,我是 5号男嘉宾
# 大家好,我是5 号男嘉宾
# 大家好,我是005号男嘉宾
print('我今天挣了%.2f元钱' % 3.141592653)
# 我今天挣了3.14元钱
print('我是 %%s, 我今年%d岁了' % 19)
# 我是 %s, 我今年19岁了
2.format方法
{}什么都不写也可以进行占位,会读取后面的内容,一一对应填充。
x = '大家好,我是{},我今年{}岁了'.format('张三', 18)
print(x)
{数字}根据数字的顺序进行填入,数字从0开始
y = '大家好,我是{1},我今年{0}岁了'.format(20, 'jerry')
print(y)
z = '大家好,我是{name},我今年{age}岁了,我来自{addr}'.format(age=18, name='jack', addr='襄阳')
print(z)
混合使用{数字} {变量}
a = '大家好,我是{name},我今年{1}岁了,我来自{0}'.format('泰国', 23, name='tony')
print(a)
{}什么都不写 {数字}不能混合使用
d = ['张三', 18, '上海', 180]
b = '大家好,我是{},我今年{}岁了,我来自{},身高{}cm'.format(d[0], d[1], d[2], d[3])
b = '大家好,我是{},我今年{}岁了,我来自{},身高{}cm'.format(*d)
print(b)
字典顺序无所谓
info = {'name': 'chris', 'age': 23, 'addr': '北京', 'height': 190}
c = '大家好,我是{name},我今年{age}岁了,我来自{addr},身高{height}cm'.format(**info)
print(c)