day8-字符串
1.字符串和字符
- 什么是字符串(str)
容器;将’’、""、’’’’’’’、""""""作为容器的表示,里面的每个独立的文字信息就是她的元素(引号中个符
号都是字符串的元素)
元素:引号中的每个符号都是元素,字符串的元素又叫字符
不可变(不支持增删改);有序的
‘’'和"""对应的字符串可以在内容中直接回车换行
- 字符
python只有字符的概念,没有对应的数据类型。如果需要字符用长度是1的字符串来表示
2)1)转义字符
字符串中的元素/符号/字符分为两种:一种是普通字符,另外一种是转义字符
a.普通字符 - 除了转义字符意外的字符都属于普通字符;普通字符在字符串中表示这个符号本身
b.转义字符 - 通过 \加其他字符 的形式存在,它在字符串中有特殊功能或者特殊意义
\n - 换行(回车)
\t - 水平制表符(tab)
’ - 表示一个单引号
" - 表示一个双引号
\ - 表示一个反斜杠
\u四位的十六进制数 - 表示四位十六进制数作为编码值对应的字符
s0 = 'bac\u4eff123p'
s1 = 'ab\nwo'
print(s1)
- 字符编码
计算机能直接存储的数据只有数字,而且存的是数字的补码。
文本数据没有办法直接存到计算机,计算在保存文本数据的时候,存的其实是每个文本符号对应的
数字(对计算机来讲,每个文本符号都会对应的数字就是这个符号的编码值
4)3)字符编码方式:ASCII码、Unicode码
编码表中保护的就是每个符号和数字之间的 - 对应关系
ASCII码表: a.总共128个字符,每个字符对应你的编码范围:0~127(只有美国人用的符号)
b.数字在字母的前面;大写字母在小写字母前面;大写字母不和小写字母紧挨着
Unicode编码表: a.Unicode编码表示ASCII码表的扩展
b.中文编码范围:4e00 ~ 9fa5
c.python采用的Unicode编码表
- 编码字符:\u编码值
1)编码字符:\u编码值
print('\u4e00~\u9fa5')
2)chr(编码值) - 获取指定编码值对应的字符
print(chr(0x4e00))
print(chr(97))
3)ord(字符) - 获取字符编码值
print(ord('翁'), ord('忠'), ord('斌')) # 32705 24544 25996
print(hex(ord('翁')))
2.获取字符
- 获取字符
字符串获取字符的语法和列表获取元素的语法一样
1)获取单个字符(字符串[下标])
str1 = 'hello world'
print(str1[1], str1[-1])
a.一个空格也是一个字符
str2 = 'abc 123'
print(str2[4]) # 1
b.一个转义字符也是一个字符
str4 = 'abc\n988'
print(str4[4]) # 1
2)切片
message = 'Really get to know yourself before you make any decision.'
print(message[-5:]) # sion.
print(message[1:4:2]) # el
print(message[::-1]) # .noisiced yna ekam uoy erofeb flesruoy wonk ot teg yllaeR
print(message[:-5:-1]) # .noi
3)遍历
for x in 'ab\u4e00c':
print(x)
for index in range(len(message)):
print('字符', message[index])
for index, item in enumerate(message):
print('字符', index, item)
3.字符串相关
- 数字运算符:+,*
1) 字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串
str1 = 'abc'
str2 = '123'
print(str1 + str2) # 'abc123'
- 字符串N/N字符串 - 字符串重复N此产生一个新的字符串
print('abc'*2) # abcabc
- 比较运算符
- ==、!=
print('abc' == 'abc') # True
- <、>、>=、<=
字符串1 > 字符串2
两个字符串比较大小,比较的是第一对不相等的字符的大小.(两个字符比较大小比较的是字符的编码值的大小)
print('abc' > '123445') # True
print('ABC' > 'abc') # False
print('翁忠斌' > 'maqitian') # True
比较运算符的应用:判断字符的类型
是否是数字: ‘0’ <= 字符 <= ‘9’
是否是大写字母:‘A’ <= 字符 <= ‘Z’
是否是小写字母: ‘a’ <= x <= ‘z’
# 练习:分别统计字符串中中文字符的个数和字母的个数
str3 = '阿达撒关节窝odzgjf-。'
num1 = 0
num2 = 0
for x in str3:
if '\u4e00' <= x <= '\u9fa5':
num1 += 1
elif 'A' <= x <= 'Z' or 'a' <= x <= 'z':
num2 += 1
print('中文个数:', num1, '字母个数:', num2)
# 练习2:判断一个字符串中是否有数字字符,有打印True, 没有打印False
# 'bans江苏省' -> False '三角函数sss223==' -> True
for x in str3:
if '0' <= x <= '9':
print('True')
break
else:
print('False')
- in 和 not in
字符 in 字符串 - 判断字符串中是否存在指定的字符
字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串
print('a' in 'abc')
print('Z' in 'abc')
print('abc' in 'a1b2c3') # False
print('abc' in '123abc舒克') # True
- 相关函数(max,min,sorted)
print(max('jskm')) # s
len
print(len('abc')) # 3
print(len('\tabc\n123')) # 8
str
str(数据) - 将数据转换成字符串
所有类型数据都可以转换成字符串;数据转换成字符串的时候,是直接在数据打印值最外层加引号
100 -> ‘100’
13.12.5 -> ‘12.5’
[10, 20, 30] -> ‘[10, 20, 30]’
[‘abc’, 10, 20] -> “[‘abc’, 10, 20]”
eval函数 - 将列表格式的字符串转换成列表或者将字典格式的字符串转换成字典
str4 = "['abc', 10, 20]"
list2 = eval(str4)
print(list2)
4.字符串相关方法
- 字符串1.count(字符串2) - 统计字符串2在字符串1中出现的次数
str1 = 'abmsidssasiissddd'
print(str1.count('a'))
print(str1.count('ss'))
print('how are you! and you?'.count('you')) # 2
- 字符串1.index(字符串2) - 查找字符串2第一次出现在字符串1中的位置,以正的下标值返回
message = 'how are you! and you? and'
print(message.index('y')) # 8
print(message.index('and')) # 13
# print(message.index('anm')) # ValueError: substring not found
- 字符串.join(序列) - 将序列中的元素通过字符串连接产生一个新的字符串
注意:序列中的元素必须是字符串
list1 = ['how', 'are', 'you']
print(str(list1)) # "['how', 'are', 'you']"
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
# 练习:['abc', 120, True, 12.5] -> 'abc+120+True+12.5'
# ['abc', 120, True, 12.5] -> ['abc', '120', 'True', '12.5']
list1 = ['abc', 120, True, 12.5]
print('+'.join([str(x) for x in list1])) # abc+120+True+12.5
new_list1 = []
for x in list1:
new_list1.append(str(x))
- 切割(split)
字符串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('000abc123abc456abc789'.split('abc')) # ['000', '123', '456', '789']
注意:切割点在字符串两端或者切割点连续出现都可能产生空串
print('abc123abc456abc789'.split('abc')) # ['', '123', '456', '789']
print('123abcabc345'.split('abc')) # ['123', '', '345']
list2 = ['', '123', '456', '', '789', '']
new_list2 = [x for x in list2 if x]
print(new_list2)
- 替换(replace)
字符串1.replace(字符串2, 字符串3) - 将字符串1中的字符串2都替换成字符串3
字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2替换成字符串3
str2 = 'abc123andyou'
print(str2.replace('a', 'B')) # Bbc123Bndyou
print(str2.replace('123', '321')) # abc321andyou