一、元组
tuple
1)元组是容器型数据类型;将()作为容器的标志,里面多个元素用逗号隔开:(数据1 , 数据2 , 数据3 , …)
2)元组是不可变的(不支持增删改)
3)有序的(支持下标操作)
4)元素:没有要求
举例:
# 空元组
t1 = ()
1.只有一个元素的元组在表示的时候,唯一的元素后面必须加逗号
# 有一个元素的元组
t2 = (10,)
print(t2, type(t2), len(t2))
2.在没有歧义的情况下,元组的()可以省略(直接将多个数据用逗号隔开表示的也是一个元组)
t3 = 10, 20, 30
print(t3, len(t3))
3.解包 :使用多个变量直接获取元组、列表中的多个元素
t4 = (10, 20, 30)
print(t4[0], t4[1], t4[2])
x, y, z = t4
print(x, y, z)
a, b, c = (11, 22, 33)
4.元素是不可变的列表
t4 = (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, 8787))
二、认识字符串
str
1)字符串是容器型数据类型(字符串对应的容器只能保存多个文字符号 - 字符)
2)不可变的(不支持增删改);字符串有序(支持下标)
3)元素:引号中的每个符号都是字符串的元素(任何文字符号都可以是字符串的元素),字符串的元素又叫字符
将’'或者""作为容器的标志
注意:字符串的元素(字符)分为两种:
普通字符 : 符号在字符串中表示它本身
转义字符 : 符号在字符串中有特殊功能或者特殊意义,没有表示这个符号本身
str1 = 'abc'
str2 = "abc"
# 多行字符串
str3 = '''abc'''
str4 = """abc"""
1.多行注释只有在特定的位置上才是注释
def func1():
"""多行注释"""
"""abc"""
注意:这里的"""abc"""就不是注释
2.字符串不可变,所有可变操作都是在创建对应的新的字符串
str1 = 'mna'
new_str1 = str1.upper()
print(str1, new_str1)
3.字符串有序
print('abc' == 'bca') # False
4.任何文字符号都可以是字符串的元素
str2 = 'amKN12,.。;=-+&^%函数😁♠♣'
print(str2)
三、字符
(一)转义字符
转义字符是由\和另外一个或者多个符号一起组合而成
转义字符一定是 \ 开头
在特定的符号前加上\,让这个符号在字符串中具有特殊的功能或者特殊意义的字符就是转义字符。
并不是随便一个字符前加\都可以变成转义字符!!!
常见的转义字符:
'''
\n - 换行
\t - 水平制表符(相当于按tab键)
\' - 表示一个普通的单引号
\" - 表示一个普通的双引号
\\ - 表示一个普通的反斜杠
'''
我们用实际的例子来具体理解一下:
str1 = '\tabc\n123'
print(str1)
str1 = '\t床前明月光,\n\t疑是地上霜。\n\t举头望明月,\n\t低头思故乡。'
print(str1)
# 显示:It's me!
str1 = 'It\'s me!'
print(str1)
str1 = "It's me!" # 如果我们用双引号表示字符串,那么里面的单引号就不会受到影响了
print(str1)
# 显示:I say:"good good study,day day up"
str1 = 'I say:"good good study,day day up"' # 反之,用单引号那么双引号也不受影响
print(str1)
# 但如果用字符串用双引号表示,里面内容也有双引号就需要加\来变为普通字符了
str1 = "I say:\"good good study,day day up\""
print(str1)
# 1'30"
str1 = '1\'30"'
print(str1)
# abc\n123
str1 = 'abc\\n123'
print(str1)
(二)r字符串
在字符串引号前加r或者R
如果表示字符串的时候在字符串最前面加r/R,可以让字符串中所有的转义字符功能消失
r字符串中所有的字符都是普通字符
比如:
str3 = R'\tabc\n123'
print(str3)
path = r'c:\study\abc\bin\text.txt'
print(path)
(三)编码字符
所有的字符都可以表示成编码字符
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
4)16进制数:由09和af(A~F)组成的数字:1f、abc、4e00、0ff、0x89
四、字符编码
计算机存储数据只能存数字
换句话来说:计算机只具备存储数字的能力
编码值:为了能够让计算机保存文字信息,就给每一个文本符号对应一个固定的数字,每次需要存储这个文本符号的,就存储这个符号对应的数字(编码值)
(一)编码表
保存每个符号对应的编码值的表
ASCII码表
总共有128个字符对应的编码值,主要包含:常用的英文符号、数字字符、和字母
需要记住的范围值:
0-9对应范围:48-57
A-Z对应范围:65-90
a-z对应范围:97-122
Unicode编码表(Python)
Unicode编码表中包含ASCII表
Unicode又叫统一码、万国码,它包含了世界上所有国家所有民族的所有语言的符号。
所有的中文:\u4e00-\u9fa5(19968-40869)
(二)编码值的应用
1) chr(编码值)
获取指定编码值对应的字符
print(chr(97)) # a
print(chr(0x4e00)) # 一
print(chr(0x9fa5)) # 龥(yù)
2) ord(字符)
获取指定字符对应的编码值(编码值以10进制的方式返回值)
注意:字符是长度为1的字符串
print(ord('a'), ord('A'))
hex(数字) : 将数字表示成16进制数
print(hex(20313), hex(23159))
我们举例来实际的应用:
# 将小写字母转换成大写字母
c1 = 'b'
result = chr(ord(c1) - 32)
print(result)
3)编码字符
在字符串中表示字符的方式有两种:直接提供字符,也可以提供一个编码字符。
举例:
判断c2保存的字符是否是中文
c2 = '看'
if '\u4e00' <= c2 <= '\u9fa5':
print(c2, '是中文')
else:
print(c2, '不是中文')
五、字符串基本操作
(一)查
字符串获取元素和列表获取元素的语法一模一样
message = 'hello python!'
print(message[0], message[-1], message[4])
print(message[1:-1:2]) # 'el yhn'
print(message[1:4:-1]) # ''
print(message[2:]) # 'llo python!'
一个小技巧:选中需要的片段,界面底部会显示选中片段的长度
要注意手动换行 \n,长度为1
通过示例来理解:
str1 = """
从前有座山,
山里有座庙,
庙里有个老和尚
老和尚对小和尚说
"""
# 获取第一个“山”,下标为5,因为第一行手动换行 \n占一个
print(str1[5])
# “说”的下标
print(str1[-2])
(二)+、*
字符串1 + 字符串2 - 将两个字符串合并,产生一个新的字符串
字符串 * N - 字符串重复N次产生一个新的字符串
str1 = 'abc'
str2 = 'hello'
result = str1 + str2
print(result)
result = str1 * 3
print(result)
(三)in 和 not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
str2 = 'hello'
print('a' in str2) # False
print('h' in str2) # True
print('he' in str2) # True
print('hl' in str2) # False
(四)字符串的遍历
1)直接遍历
message = 'hello python!'
for x in message:
print(x)
2)间接遍历
message = 'hello python!'
for index in range(len(message)):
print(index, message[index])
for index, item in enumerate(message):
print(index, item)