字符串:查、字符、字符串相关方法、字符串格式化
元组
-
什么是元组(tuple)
元组是容器型数据类型;将()作为容器的标志,里面多个元素用逗号隔开:(数据1,数据2,…)
元组是不可变的(不支持增删改);有序的(支持下标操作)
元素:没有要求# 空元组 t1 = ()
-
只有一个元素的元组在表示的时候唯一的元素后面必须加逗号
# [10] t2 = (10) # 10 print(t2, type(t2)) # <class 'int'> t2 = (10,) # (10,) print(t2, type(t2), len(t2)) # <class 'tuple'> 1
-
在没有歧义的情况下,元组的()可以省略 (直接将多个数据用逗号隔开表示的也是一个元组)
t3 = 10, 20, 30 print(t3, len(t3), type(t3)) # (10, 20, 30) 3 <class 'tuple'>
-
解包 - 使用多个变量直接获取元组、列表中的多个元素
t4 = (10, 20, 30) print(t4[0], t4[1], t4[2]) # 10 20 30 x, y, z = t4 print(x, y, z) a, b, c = (11, 22, 33) list1 = [100, 200, 300] for index, item in enumerate(list1): print(index, item) # [(0, 100), (1, 200), (2, 300)] for x in enumerate(list1): print(x) d1 = {'a': 10, 'b': 20, 'c': 30} for key, item in d1.items(): print(key, item) # dict_items([('a', 10), ('b', 20), ('c', 30)]) print(d1.items())
-
元组就是不可变的列表
t5 = (10, 20, 30) print(t4[-1]) print(t4[1:]) print(t4 * 2, t4 + (1, 100)) print(10 in t4) print((10, 20, 30) > (1, 100, 200, 23156)) week = ('周一', '周二', '周三', '周四', '周五', '周六', '周日')
认识字符串
-
什么是字符串(str)
1)字符串是容器型数据类型(字符串对应的容器只能保存多个文字符号-字符)。将’'或者""作为容器的标志,里面的每一个符号就是字符串中每一个元素
2)不可变的(不支持增删改);字符串有序(支持下标)
3)元素:引号中的每个符号都是字符串的元素(任何文字符号都可以是字符串的元素),字符串的元素又叫字符
注意:字符串的元素(字符)分为两种:普通字符(符号在字符串中表示它本身)、转义字符(符号在字符串中)str1 = 'abc' str2 = 'abc' # 多行字符串 str3 = '''abc''' str4 = """abc""" # 多行注释只有在特定位置才是注释 def func1(): """多行注释""" """abc""" class A: """多行注释""" """abc""" # 字符串不可变,所有可变操作都是在创建对应的新的字符串 str1 = 'mua' new_str1 = str1.upper() print(str, new_str1) # <class 'str'> MUA # 字符串有序 print('abc' == 'bca') # False # 任何文字符号都可以是字符串的元素 str2 = 'hgiaf♠♣(*^▽^*)' print(str2) # 普通字符 str3 = 'abc' print(str3) # abc str4 = 'a\thgdasd' print(str4) # a hgdasd
字符
字符串中每个独立的符号就是字符
-
转义字符
转义字符是由\和另外一个或者多个符号一起组合而成(转义字符一定是\开头)
在特定的符号前加上\。让这个符号在字符串中具有特殊的功能或者特殊意义的字符就是转义字符
转义字符有哪些是固定的(并不是随便一个字符前面加\都可以变成转义字符);常见的转义字符:
\n - 换行
\t - 水平制表符(相当于按tab键)
’ - 表示一个普通的单引号
" - 表示一个普通的双引号
\ - 表示一个普通的反斜杠str1 = 'abc\n123' print(str1) """ abc 123 """ str2 = '\t床前明月光,\n\t疑是地上霜。\n\t举头望明月,\n\t低头思故乡。' print(str2) """ 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。 """ str1 = 'abc\t123' print(str1) # abc 123 # It's me! str1 = 'It\'s me!' print(str1) # It's me! str1 = "It's me!" print(str1) # It's me! # I say:"good good study,day day up!" str1 = 'I say:"good good study,day day up!"' print(str1) # I say:"good good study,day day up!" str1 = "I say:\"good good study,day day up!\"" print(str1) # I say:"good good study,day day up!" # 1'30" str1 = '1\'30\"' # 1'30" print(str1) # abc/123 str1 = 'abc\\123' print(str1) # c:\study\abc\bin\text.txt path = 'c:\study\\abc\\bin\\text.txt' print(path) # c:\study\abc\bin\text.txt
-
r字符串 - 在字符串引号前加r或者R
如果表示字符串的时候在字符串最前面加r或者R,可以让字符串中所有的转义字符功能消失(r字符中所有的字符都是普通字符)
str1 = r'abc' str2 = R'abc' str3 = R'\tabc\n123' print(str3) # \tabc\n123 path = r'c:\study\abc\bin\text.txt' print(path) # c:\study\abc\bin\text.txt
-
编码字符(所有的字符都可以表示为编码字符)
\u四位十六进制数
str1 = '\u4e00abc一\u0f55\u1512\u9fa5' print(str1) # 一abc一ཕᔒ龥
补1: 16进制数
1)10进制数(生活):由0~9组成的数字了,18,16500,22
100,25
2)2进制数:由0和1组成的数字:10000,1100,1011,101
0b1001
3)8进制数:由0~7组成的数字:245,002,777,771,071
0o77
4)16进制数:由09和af(A~F)组成的数字:1f、abc、4e00、0ff
0xff
字符编码
-
字符编码
计算机存储数据只能存数字(计算机只具备存储数字的能力)
为了能够让计算机保存文字信息,就给每一个文本符号对应一个固定文字,每次在需要存储这个文本符号时,就存储这个符号对应的数字。
这个数字就叫这个符号的编码值。 -
编码表 - 保存每个符号对应的编码值的表
1)ASCII码表
总共有128个字符对应的编码值,主要包括:常用的英文符号、数学字符、和字母
A - 65
a - 97
2)Unicode编码表(Python)
Unicode编码表中包含ASCII表
Unicode又叫统一码、万国码,它包含了世界上所有国家所有民族的所有语言的符号
中文编码:4e00~9fa5print(0x9fa5 - 0x4e00) # 20901
-
编码值的应用
1)chr(编码值) - 获取指定编码值对应的字符
print(chr(97)) # a print(chr(0x4e00)) # 一 print(chr(0x9fa5)) # 龥(yù) # 盲文 for x in range(0x2800, 0x28ff + 1): print(chr(x), end='') # 易经 for x in range(0x4DC0, 0x4DFF + 1): print(chr(x), end='') # 中文 for x in range(0x4e00, 0x9fa5 + 1): print(chr(x), end='')
2)ord(字符) - 获取指定字符对应的编码值(编码值以10进制的方式返回值)
注意:字符 - 长度为1的字符串
print(ord('a'), ord('A')) # 97 65 print(ord('张'), ord('立'), ord('强')) # 24352 31435 24378 # hex(数字) - 将数字表示成16进制数 print(hex(24352), hex(31435), hex(24378)) # 0x5f20 0x7acb 0x5f3a # 案例:将小写字母转换成大写字母 c1 = input('请输入一个小写字母:') print(chr(ord(c1) - 32))
3)编码字符
在字符串中表示字符的方式有两种:直接提供字符,也可以提供一个编码字符
\u4位的16进制编码值
str1 = 'a一' str2 = '\u0061\u4e00' print(str1, str2) # a一 a一 c2 = input('请输入一个字符:') if '\u4e00' <= c2 <= '\u9fa5': print(c1, '是中文') else: print(c2, '不是中文') # a 不是中文 # 案例:判断c2保存的字符是否是大写字母 c2 = input('请输入一个字母:') if 'A' <= c2 <= 'Z': print('是大写') else: print('不是大写') # 两个字符串比较大小比较的是第一对不相等的字符的编码值的大小 print('abc' > 'Masdad') # True
字符串基本操作
-
查
字符串获取元素和列表获取元素的语法一模一样
message = 'hello python!' print(message[0], message[-1]) # h ! print(message[1:-1:2]) # 'el yhn' print(message[1:4:-1]) # '' print(message[2:]) # 'llo python!' for i in message: print(i) for i in range(len(message)): print(i, message[i]) for x, y in enumerate(message): print(x, y)
-
+,*
字符串1+字符串 - 将两个字符串合并,产生一个新的字符串
字符串 * N - 字符串重复N次产生一个新的字符串str1 = 'abc' str2 = 'hello' result = str1 + str2 print(result) # abchello result = str1 * 3 print(result) # abcabcabc
-
in 和 not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
str2 = 'hello' print('a' in str2) # False print('b' in str2) # False print('he' in str2) # True print('ho' in str2) # False # 案例:统计str1中中文的个数 str1 = '换手机hss8223Kks是sjd==222' count = 0 for i in str1: if '\u4e00' <= i <= '\u9fa5': count += 1 print(count) # 案例:提取字符串中所有的大写字母 str2 = '涉及到MJk230023sjkU293shT==' # 'MJUT' # 方法1 for i in str2: if 'A' <= i <= 'Z': print(i, end='') # 方法2 str2 = '涉及到MJk230023sjkU293shT==' new_str2 = '' for i in str2: if 'A' <= i <= 'Z': new_str2 += i print(new_str2)