一、概括
python的数据类型分为三类:数值类型,序列类型,散列类型。
- 数值类型:int,float,bool
- 序列类型:字符串,列表,元组
- 散列类型:集合,字典
序列类型可以通过下标来取值;散列类型无法通过下标来取值,如果写了,则代码运行时会报错。
dic = {'语文': 88, '数学': 130, '英语': 90,'政治':74,'物理':82}
se = {1, 2, 3, 4, 5, 6, 7, 8}
print(dic[0]) # KeyError: 0
print(se[0]) # TypeError: 'set' object is not subscriptable
二、序列类型
2.1 序列索引
定义:序列是一块可以存放多个值的连续空间,这些值按照一定的顺序排列着,可以根据每个值所在的编号来访问它们,这种访问方法称之为索引。
索引有两种,一种是正向索引,即从左到右序列索引,索引值范围:0 ~ n-1;另外一种是反向索引,即从右到左序列索引,索引值范围: -1 ~ -n
以下的表格里列出正向、反向索引和下标的区别,使用时不要弄混,下标是从1开始算。
序列 | C | S | D | N | 博 | 客 | 论 | 坛 |
正向索引值 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
反向索引值 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
# 正向索引和反向索引
s = 'CSDN博客论坛'
print(s[0], '=', s[-8]) # C = C
print(s[7]) # 坛
2.2 可变类型和不可变类型
可变概念:值在发生改变时,内存地址(id)不变
不可变概念:值在发生改变时,内存地址也变了
不可变类型:数值,字符串,元组
可变类型:列表,字典,集合
# 可变类型,修改列表元素前后,其id不变
li = [0,1,2,3,4,5,6]
print(f'原列表:{li}',f'id={id(li)}') # 原列表:[0, 1, 2, 3, 4, 5, 6] id=2617433116288
li[0] = 100
print(f'修改后列表:{li}',f'id={id(li)}') # 修改后列表:[100, 1, 2, 3, 4, 5, 6] id=2617433116288
# 不可变的序列,无法修改其中的值
s = 'hello'
s[0] = 'a'
print(s) # 报错
2.3 字符串
定义:字符串是一个有序的字符集合,用于存储和表示基本的文本信息。
2.3.1 常用方法
操作数据的基本方法:增删改查
语法:
字符串.方法名()
2.3.1.1 find()
功能:范围性查找子串,返回索引值,没有找到则返回-1
语法:
str.find(str1,beg=0,end=led(string))
-
str1 --> 指定检索的字符串
-
beg --> 开始的索引,默认值为0
-
end --> 结束的索引,默认字符串的长度
# 检测字符串中是否包含子字符串
s = 'hello world'
print(s.find('h')) # 0 可以找单个字符
print(s.find('world')) # 6 也可以找一个子串
print(s.find('worldd')) # -1
# 指定查找的开始位置
s = 'python,helloworld,java,php'
print(s.find('h')) # 3 默认从索引0开始找
print(s.find('h',4)) # 7 , 也可以从下标 4 之后开始找
print(s.rfind('h')) # 24 , rfind()从后面往回找
2.3.1.2 index()
功能:检测出字符串中是否包含子字符串str,和find差不多,但是如果str找不到,则会报错。
语法:
str.index(str1,beg=0,end=led(string))
-
str1 --> 指定检索的字符串
-
beg --> 开始的索引,默认值为0
-
end --> 结束的索引,默认字符串的长度
s = 'python,helloworld,java,php'
print(s.index('h')) # 3
print(s.index('java')) # 18
print(s.index('o',6)) # 11,从下标 5后面开始找
print(s.index('oo')) # 报错
2.3.1.3 count()
功能:返回找到的子串个数,找不到返回0。
语法:
str.count(str1,beg=0,end=led(string))
-
str1 --> 指定检索的字符串
-
beg --> 开始的索引,默认值为0
-
end --> 结束的索引,默认字符串的长度
# 计算子字符串出现的次数
s = 'python,helloworld,java,php'
print(s.count('h')) # 3
print(s.count('python')) # 2
2.3.1.4 strip()
功能:去除字符串两边的空格,换行符,制表符,返回一个新的字符串
语法:
str.strip()
# 去除字符串前后的空格
s = ' python,helloworld,java,php,python '
print(s) # python,helloworld,java,php,python
print(s.strip()) # python,helloworld,java,php,python
2.3.1.5 startswich() 和endswith()
功能:
-
startswich(),判断字符串是否以XXX开始,得到一个布尔值
-
endswith(),判断字符串是否以XXX结束,得到一个布尔值
# 判断字符串的开头和结尾
s = '123python,helloworld,java,php,python321'
print(s.startswith('123')) # True
print(s.endswith('321')) # True
print(s.startswith('abc')) # False
print(s.endswith('abc')) # False
2.3.1.6 isdigit()
功能:判断字符串是否是由数字组成,返回True和False
# 判断输入两个数是否纯数字,如果是则输出两个数相加结果
v1 = input('请输入第一个数:')
v2 = input('请输入第二个数:')
if v1.isdigit() and v2.isdigit():
print(int(v1) + int(v2))
else:
print('请输入正确的数字')