08字符串
字符串
- 字符串和字符
1.什么是字符串
容器:将’’、""、’’’’’’、"""""",作为容器的标志,里面的每个独立的文字信息就是它的元素(引号中的每个符号都是字符串的元素)
元素:引号中的每个符号都是元素,元素又叫字符
不可变(不支持增删改);有序的(支持下标操作)
s1 = 'a6, 你好'
s2 = "数ki025"
s3 = '※❤'
print(type(s1),type(s2),type(s3))
s4 = '''abc123'''
s5 = """abc123"""
# '''和"""对应的字符串可以在内容中通过回车换行
s6 = '''abc
123
'''
print(s6)
2.字符
python中只有字符的概念,没有对应的数据类型。如果需要字符,用长度是1的字符串表示
- 转义字符
字符串中的元素/符号/字符分为两种:一种是普通字符,另外一种是转义字符
a.普通字符 - 除了转义字符以外的字符都属于普通字符;普通字符在字符串中表示这个符号本身
b.转义字符 - 通过\加其他字符的形式存在,它在字符串中有特殊功能或者特殊意义
\n - 换行(回车)
\t - 水平制表符(tab)
’ - 表示一个单引号
" - 表示一个双引号
\ - 表示一个反斜杠
\u4eff(四位的16进制数) - 表示四位16进制数作为编码值对应的字符
s7 = 'abc\n123'
print(s7)
s8 = 'abc\'123"'
print(s8)
s9 = "abc'123\""
print(s9)
s10 = 'abc\\n123'
print(s10)
s11 = 'abc\u4eff123\u4e8f'
print(s11)
3.字符编码
1)计算机能直接存储的数据只有数字,而且存的是数字的补码
2)文本数据没有办法直接存到计算机中,计算在保存文本数据的时候,存的其实是每个文本符号对应的数字
(对计算机来讲,每个文本符号都会对应一个固定的数字),每一个文本符号对应的数字就是这个符号的编码值
3)字符编码方式:ASCII码,Unicode码
编码表中记录了不同的符号对应的编码值,一一对应
ASCII码表:a.总共128个字符,每个字符对应的编码范围为0-127(只有美国符号)
b.数字在字母的前面;大写字母在小写字母前面;大写字母和小写字母没有紧挨着
Unicode编码表:a.Unicode编码表示ASCII码表的扩展
b.中文编码范围:4e00-9fa5
c.python采用的Unicode
4.编码值的使用
1)编码字符:\u编码值
print('\u4e00~\u9fa5')
print('a\u0061')
2)chr(编码值) - 获取指定编码值对应的字符
print(chr(0x4e00))
print(chr(97))
print(chr(0x56ef))
3)ord(字符) - 获取字符编码值
print(ord('余'), ord('婷')) # 20313 23159
print(hex(ord('余')), hex(ord('婷'))) # 0x4f59 0x5a77
- 获取字符
1.获取字符
字符串获取字符的语法和列表获取元素的语法一样
1)获取单个字符
# 字符串[下标]
str1 = 'hello python!'
print(str1[1], str1[-1])
# a.一个空格是一个字符
str2 = 'abc 123'
print(str2[4])
str3 = 'abc 123'
print(str3[5])
# b.一个转义字符是一个字符
str4 = 'abc\n123'
print(str4[4])
str5 = '\tabc123'
print(str5[1])
str6 = ' abc123'
print(str6[4])
str7 = '\u4e00abc'
print(str7[1])
2)切片
message = 'Really get to know yourself before you make any decision.'
print(message[-5:]) # sion.
print(message[1:6:2]) # ely
print(message[:-5:-1]) # .noi
3)遍历
for x in 'ab\u4e00c':
print(x)
- 字符串相关操作
1.数学运算符:+、*
1)字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串
str1 = 'abc'
str2 = '123'
print(str1 + str2)
name = '小明'
age = 18
message = name+'今年'+str(age)+'岁'
print(message)
2)字符串N / N字符串 - 字符串重复N次产生一个新的字符串
print('abc'*2)
print('hello world!\n' * 100)
2.比较运算符
# 1) ==、!=
print('abc' == 'abc')
print('abc' == 'acb')
# 2)>、<、>=、<=
# 字符串1 > 字符串2
# 两个字符串比较大小,比较的是第一对不相等的字符的大小(两个字符比较大小比较的是字符的编码值的大小)
print('abc' > '123456') # True
print('Abc' > 'abc') # False
print('余婷' > 'hello world!') # True
# 比较运算符的应用:判断字符的类型
"""
是否是数字:48 <= ord(字符) <= 57 / '0' <= 字符 <= '9'
是否是大写字母: 'A' <= 字符 <= 'Z'
是否是小写字母: 'a' <= 字符 <= 'z'
是否是字母:'A' <= 字符 <= 'Z' or 'a' <= 字符 <= 'z'
是否是中文:'\u4e00' <= 字符 <= '\u9fa5'
"""
# 练习:分别统计字符串中中文字符的个数和字母的个数
str3 = 'hsjj数据是2823竭尽所能SJJ==-2...数kkl'
chinese = 0
for x in str3:
if '\u4e00' <= x <= '\u9fa5':
chinese += 1
print('中文字符的个数为:',chinese)
word = 0
for x in str3:
if 'a' <= x <= 'z' or 'A' <= x <= 'Z':
word += 1
print('英文字符的个数为:',word)
# 练习2:判断一个字符串中是否有数字字符,有打印True, 没有打印False
# 'bans江苏省' -> False '三角函数sss223==' -> True
str4 = 'bans江苏省'
str5 = '三角函数sss223=='
for x in str4:
if '0' <= x <= '9':
print(True)
break
else:
print(False)
for x in str5:
if '0' <= x <= '9':
print(True)
break
else:
print(False)
3.in 和 not in
字符 in 字符串 - 判断字符串中是否存在指定的字符
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串
print('a' in 'abc') # True
print('Z' in 'abc') # False
print('abc' in 'a1b2c3') # False
print('abc' in '123abc舒克舒克') # True
4.相关函数
# max,min,sorted
print(max('jskm')) # s
print(sorted('jskm')) # ['j', 'k', 'm', 's']
# len
print(len('\tabc\n123'))
# str
# str(数据) - 将数据转换成字符串
# 所有类型数据都可以转换成字符串;数据转换成字符串的时候,是直接在数据打印值的最外层加引号
# 100 -> '100'
# [10,20,30] -> '[10,20,30]'
# ['abc',10,20] -> "['abc',10,20]"
list1 = ['abc',10,20]
print(str(list1))
list1_str = str(list1)
# eval()将列表格式的字符串转换成列表,或者将字典格式的字符串转换成字典
new_list1 = eval(list1_str)
print(new_list1)
- 字符串相关方法
1.字符串1.count(字符串2) - 统计字符串2在字符串1中出现的次数
str1 = 'abcdddeeffffg'
print(str1.count('d')) # 3
print(str1.count('ddd')) # 1
2.字符串1.index(字符串2) - 获取字符串2第一次出现在字符串1中的位置
message = 'how are you! and you?'
print(message.index('y')) # 8
print(message.index('and')) # 13
3.字符串.join(序列) - 将序列中的元素通过字符串连接产生一个新的字符串
注意:序列中的元素必须是字符串
list1 = ['how', 'are', 'you']
print(str(list1))
result = ''.join(list1)
print(result) # howareyou
result = ' '.join(list1)
print(result) # how are you
result = '加上'.join(list1)
print(result) # how加上are加上you
result = '+'.join('abc')
print(result) # a+b+c
字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割,返回切完后每一段对应的列表
字符串1.split(字符串2,N) - 将字符串1中前N个字符串2作为切割点
message = 'how are you!'
result = message.split(' ')
print(result) # ['how', 'are', 'you!']
# 注意:切割点在两端或连续时会出现空串
print('abc123abc456abc789'.split('abc')) # ['', '123', '456', '789']
print('123abcabc456abc789'.split('abc')) # ['123', '', '456', '789']
list2 = ['', '123', '456', '789']
new_list2 = [x for x in list2 if x]
字符串1.replace(字符串2,字符串3) - 将字符串1中的字符串2都替换成字符串3
str2 = 'abc123andyou'
print(str2.replace('a','B')) # Bbc123Bndyou
print(str2.replace('123','321')) # abc321andyou
上一篇: 08字符串作业