python基础-基本数据类型(二)
一、序列类型
序列类型是用来表示有序的元素集合
1、字符串(str)
python中字符串通常用str表示,字符串是使用单引号,双引号,三引号包裹起来的字符的序列,用来表示文本信息。
1.1 字符串的定义
a = '123'
b = "123"
c = '''123'''
print(type(a),type(b),type(c))
<class 'str'> <class 'str'> <class 'str'>
使用单引号或者双引号表示字符串时没有任何区别,当要表示字符串的单引号时用双引号表示,反之亦然。
print('我是"双引号"')
print("我是'单引号'")
单引号,双引号只能创建单行的字符串,想要创建多行数据时需要使用三引号,三引号通常用来表示多行注释等。
定义空字符串
a = "" print(a)
1.2 字符串的索引
任何序列类型中的元素都是使用索引来表示它的位置。
字符串是字符的序列表示,单个字符在字符串中的位置也是使用索引来表示,也叫下标。
可以通过索引来获取字符串中的单个字符,索引用整数表示,从0开始
s = 'hellow,world!'
print(s[1],s[3])
输出结果:e,l
1.3字符串的切片
获取序列中的子列叫做切片,语法如下:
str[start:end:step]
start表示开始索引,end表示结束索引,step代表步长,从字符串索引为start到end之间不包含end,每个step步长取一个值,当step为1时可以省略,step为负数时反向取值
s = '12345678'
print(s[1:5:2])
输出:2,4 #包头不包尾,步长为2
print(s[:5])
输出:12345 #从头开始切不需要start
print(s[2:])
输出:345678 #切到末尾不需要end
print(s[2::-2])
输出:31 #步长为负数,反向
1.4 字符串的拼接
python中可以通过+好拼接两个字符串
s1 = "123"
s2 = "456"
print(s1+s2) 输出:123456
字符串和整数进行乘法运算表示重复拼接这个字符串
print(s1*2) 输出:123123
1.5 字符串常用方法
通过内建函数dir可以查看所有Python内建函数
print(dir(str))
输出:['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
官方文档:https://docs.python.org/3/library/stdtypes.html?utm_source=testingpai.com#string-methods
1.6 字符串和数值的相互转化
字符串和数值之间可以相互转换
字符串转换成整数:int('1') 输出:1
整数转换字符串:str(1) 输出:'1'
字符串转换成浮点数:float('1.1') 输出:1.1
浮点数转换成字符串:str(1.1) 输出:‘1.1’
1.7 转义符
常用的转义字符:
(在行尾时) | 续行符 |
---|---|
\\ |
反斜杠符号 |
\' |
单引号 |
\" |
双引号 |
\a | 响铃 |
\n | 换行 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
1.8 字符串格式化
python支持两种字符串格式化的方式:
1、%字符串格式化
语法规则如下:
%[(name)][flags][width][.precision]typecode
(name)
可选,用于选择指定的key
flags
可选,可供选择的值有,注意只有在和数值类型的typecode
配合才起作用width
,可选字符串输出宽度width 可选输出字符串长度+
, 右对齐,正数前加正号,负数前加负号-
, 左对齐,正数前无符号,负数前加负号空格
, 右对齐,正数前加空格,负数前加负号0
, 右对齐,正数前无符号,复数前加负号;用0
填充空白处
.precision
可选,小数点后保留位数,注意只有在和数值类型的typecode
配合才起作用typecode
必选s
,获取传入对象的字符串形式,并将其格式化到指定位置r
,获取传入对象的__repr__
方法的返回值,并将其格式化到指定位置c
,整数:将数字转换成其 unicode 对应的值,10 进制范围为 0 <= i <= 1114111(py27 则只支持 0-255);字符:将字符添加到指定位置o
,将整数转换成 八 进制表示,并将其格式化到指定位置x
,将整数转换成十六进制表示,并将其格式化到指定位置d
,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置e
,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写 e)E
,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写 E)f
, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后 6 位)F
,同上g
,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过 6 位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是 e;)`G
,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过 6 位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是 E;)`- %,当字符串中存在格式化标志时,需要用 %% 表示一个百分号
例子:
res = '%s学校的升学率为%s%%'%('某某',80)
print(res)
某某学校的升学率为80%
res = '%(school)s学校的升学率为%(percent)s%%'%('school':'某某','percent':80)
print(res)
某某学校的升学率为80%
注:%后是字典时,可以通过name指定key的值
res = '%(school)s学校的升学率为%(percent).2f%%'%('school':'某某','percent':80.888)
print(res)
某某学校的升学率为80.89%
注:保留两位小数
2、format字符串格式化
%字符串格式化继承C语言,Python中给字符串对象提供了一个format函数来进行字符串格式化
基本语法:<模板字符串>.format(<逗号分隔的参数>)
在模板字符串中使用{}代替%做为槽位
例:
res = '{}学校的升学率为{}%'.format('某某',80)
print(res)
某某学校的升学率为80%
当format中的参数使用位置参数时,{}中可以填写参数的整数索引让其一一对应
res = '{0}学校的升学率为{1}%'.format('某某',80)
print(res)
某某学校的升学率为80%
当format中的参数使用关键字参数时,{}中可以填写参数的关键字来表示
res = '{school}学校的升学率为{percent}%.format(school='某某',percent=80)
print(res)
某某学校的升学率为80%
{}除了可以写参数索引外,还可以填写控制信息来实现更多的格式化。语法如下:
{<参数序号>:<格式控制标记>}
其中格式控制标记格式如下
[fill][align][sign][#][0][width][,][.precision][type]
fill 【可选】空白处填充的字符
2. align 【可选】对齐方式(需配合 width 使用)
2.1 <,内容左对齐
2.2 >,内容右对齐(默认)
2.3 =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号 + 填充物 + 数字
2.4 ^,内容居中
3.sign 【可选】有无符号数字
3.1 +,正号加正,负号加负;
3.2 -,正号不变,负号加负;
3.3 空格 ,正号空格,负号加负;
4.#【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
5.
‘,’ 【可选】为数字添加分隔符,如:1,000,000
6.width 【可选】格式化位所占宽度
7..precision 【可选】小数位保留精度
8.type 【可选】格式化类型
- 传入” 字符串类型 “的参数
- s,格式化字符串类型数据
- 空白,未指定类型,则默认是 None,同 s
- 传入“ 整数类型 ”的参数
- b,将 10 进制整数自动转换成 2 进制表示然后格式化
- c,将 10 进制整数自动转换为其对应的 unicode 字符
- d,十进制整数
- o,将 10 进制整数自动转换成 8 进制表示然后格式化;
- x,将 10 进制整数自动转换成 16 进制表示然后格式化(小写 x)
- X,将 10 进制整数自动转换成 16 进制表示然后格式化(大写 X)
- 传入“ 浮点型或小数类型 ”的参数
- e, 转换为科学计数法(小写 e)表示,然后格式化;
- E, 转换为科学计数法(大写 E)表示,然后格式化;
- f , 转换为浮点型(默认小数点后保留 6 位)表示,然后格式化;
- F, 转换为浮点型(默认小数点后保留 6 位)表示,然后格式化;
- g, 自动在 e 和 f 中切换
- G, 自动在 E 和 F 中切换
- %,显示百分比(默认显示小数点后 6 位)
- 传入” 字符串类型 “的参数
res = '{school}学校的升学率为{percent:.2%}'.format(school='moumou',percent=0.80888)
print(res)
某某学校的升学率为80.89%
注:保留两位小数
3.格式字符串字面值
格式字符串字面值或称为 f-string 是标注了 f或者F前缀的字符串字面值,这种字符串包含可替换的字段即以{}标注的表达式
基本语法是:
literal_char{expression[:format_spec]}
-
literal_char
普通字符expression
表达式,变量或函数。。format_spec
格式字符串,规则同上面的 format 字符串
直接在f字符串的{}内写上变量名,系统会自动将变量的值以字符串的形式替换
school ="某某"
percent = 80
res = f'{school}学校的升学率为{percent}'
print(res)
某某学校的升学率为80
带格式的f字符串
输出两位数月份:
month = 8
res = f'{month:>02}'
print(res)
08
2、列表
python中列表用于表示任意元素的序列,列表中可以是任意的数据类型,列表中的元素可以增删改。
2.1 列表的定义
列表由一对中括号进行定义,元素与元素之间用逗号隔开。
2.2 列表的拼接
列表可以使用加法运算进行拼接,也可乘整数进行列表的重复
a = [1,2,3]
b = [4,5,6]
print(a+b)
[1,2,3,4,5,6]
a = [1,2]
print(a*2)
[1,2,1,2]
2.3 列表的索引和切片
与序列切片操作一致
2.4 列表的常用操作
2.4.1 修改元素
列表中修改元素,只需要给索引赋值即可
a = [1,2,3]
a[2] = 4
print(a)
[1,2,4]
2.4.2 增加元素
增加元素需要使用列表的方法
.append(el) 在列表的末尾加一个元素
a=[1,2,3]
a.append(4)
print(a)
[1,2,3,4]
.insert(index,el)在列表指定的索引处添加元素
a.insert(1,2)
print(a)
[1,2,2,3]
.extend(iterable)扩展列表,传入的对象为可迭代对象中的元素
a.extend([1,2,3])
print(a)
[1,2,3,1,2,3]
2.4.3 删除元素
.pop(index) 删除指定索引处的元素,并返回该元素,未指定则默认删除最后一个元素
a = [1,2,3]
a.pop()
print(a)
[1,2]
.remove(value)从列表删除第一个指定的值value,如果不存在value则报错
a = [1,2,1,3]
a.remove(1)
print(a)
[2,1,3]
.clear(),清空列表,使列表变成空列表
a = [1,2,3]
a.clear()
print(a)
[]
2.5 列表的其他方法
.copy(),返回一个列表的浅拷贝。
.count(value),统计一个列表中元素的数量
.index(value),返回列表中指定value值得第一个索引,不存在则报错
.reverse(),翻转列表元素顺序
.sort(key=none,reverse=False),对列表进行排序,默认按照从小到大的顺序,当reverse的值为True时,从大到小,排序时列表中元素需类型相同,否则报错。
2.6 字符串和列表的转换
字符串是字符组成的序列,可以使用list函数将字符串转换成单个的字符的列表
a = 'hello world'
ls = list(a)
print(ls) ['h', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd']
3、元祖
元祖(tuple)表示任意元素的序列,元素可以是任意数据类型,但是不可以增删改,元祖是不可变列表
3.1 元祖的定义
元祖是用一对小括号进行定义,元祖之间用逗号隔开。
3.2 元祖的索引与切片
与列表一致
3.3 元祖的常用操作
元祖的元素不能增加,删除和修改,其他操作和列表一致。
元祖利用不可修改的特性,常用在多变量赋值和函数多返回值上。
3.4 元祖的常用方法
元组只有两个公有方法count,index
用法与列表相同
3.5 len函数
内建函数len可以获取元祖中的元素个数
4、可变与不可变对象
python中的对象根据底层内存机制分为可变与不可变两种
可变对象可以在其id()保持不变的情况下改变其取值
基本数据类型中列表,集合,字典都是可变类型
如果修改了一个对象的值,必须创建新的对象,那这种数据类型就是不可变类型。
基本数据类型中数字,字符串,元祖都是不可变类型。
5、可哈希对象
一个对象的哈希值如果在其生命周期内绝不改变,就被称为可哈希。可哈希对象都可以通过内置函数 hash
进行求值。
它们在需要常量哈希值的地方起着重要的作用,例如作为集合中的元素,字典中的键。
不可变数据类型都是可哈希对象,可变数据类型都是不可哈希对象。