python-数据类型(序列类型)

目录

字符串(str)

字符串的转义

字符串的运算

字符串的格式化

使用%占位符(printf风格)

f-string风格

列表(list)

增删改查

列表运算

列表函数

深浅复制

元组(tuple)

不一样的元组

元组的函数

元组的运算

序列类型的索引和切片

索引

切片


字符串(str)

定义:使用引号定义一个字符串,可以用单引号,双引号,单三引号,双三引号。其中的三引号可以在定义多行内容的字符串时使用,如果不用三引号来定义多行内容的字符串时,需要使用转义符\n进行换行操作,比较麻烦,看起来也不直观。字符串中有引号时,可以使用与其类型不同的其他引号作为python定义字符串语句的解释,放在最外层。

字符串的转义

字符串转义

转义字符

说明

\

放在行尾,如果在编写代码时,在同一行的代码太长,可以放在这行的最后,再起一行续写

\\

反斜杠符号

\'  (\")

单引号或双引号

\a

响铃

\b

退格(Backspace)

\e

转义

\000

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数,yy代表的字符,例如:\o12代表换行

\xyy

十六进制数,yy代表的字符,例如:\x0a代表换行

\other

其它的字符以普通格式输出

字符串的运算

字符串运算

运算类型

说明

加法运算

字符串拼接

乘法运算

重复字符串输出

成员运算

使用成员运算符in或not in 判断某个元素是否存在在字符串中(运算结果为bool值)

遍历(迭代)

使用for循环遍历出字符串中的每个元素

r/R

原始字符串,防止转义(r表示原始字符串:raw string

%

格式化

字符串的格式化

字符串格式化方法有两种

使用%占位符(printf风格)

使用%占位符表示这个位置先占着,然后使用变量元素来填充,填充元素为元组形式。%是一种格式化符号,python解释器对其处理方式是调用内置函数,并将对应的格式化对象作为参数传入(格式化的对象可以是整数、浮点数、列表元组等任何类型的对象),返回的结果字符串填入对应占位符。

使用占位符需要注意的几点:

  1. 占位符的位置数和后面的参数个数要一致,并相互对应。
  2. 占位符后面的变量参数一定要放在元组中,当元组参数元素大于两个时,不能省略元组括号。
  3. 只有一个元组参数时可以不用括号且不用逗号。

占位符格式化符号:

格式化符号

符号

作用

%c

格式化字符及其ASCII码

%s

格式化字符串

%d

格式化整数

%u

格式化无符号整型

%o

格式化无符号八进制数

%x

格式化无符号十六进制数

%X

格式化无符号十六进制数(大写)

%f

格式化浮点数字,可指定小数点后的精度

%e

用科学计数法格式化浮点数

%E

作用同%e,用科学计数法格式化浮点数

%g

%f和%e的简写

%G

%F和%E的简写

%p

用十六进制数格式化变量的地址

占位符格式化辅助符号:

占位符格式化辅助符号

符号  

功能

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号( + ),一般省略不写

0

显示的数字前面填充'0'而不是默认的空格,只针对于右对齐使用,只用于整数

%

'%%'输出一个单一的'%'

m.n.

m 是显示的最小总宽度,n 是小数点后的位数

举例:

# -左对齐、+右对齐(可省略)、* 这里用数字8,指定宽度
print('工资收入:%-8s元/月,生活费:%8d元/月。'%(20000,1000))
# 0 填充右对齐的整数、m.n 形式指定宽度和小数点保留位数
print('工资收入:%08d元/月,生活费:%8.2f元/月。'%(20000,1000))

  

f-string风格

f-string格式化只有在python3.6以后的版本中有。

格式化方法是在字符串模板前面加上f,然后占位符使用{},括号里面直接放入对应的变量参数。

g,s = 20000,1000
print(f'工资收入:{g}元/月,生活费:{s}元/月')

  

格式符号作用
<左对齐(字符串默认对齐方式)
>右对齐(数值默认对齐方式),可以不写
^居中

g,s,o = 20000,1000,800
print(f'工资收入:{g:<10}元/月,生活费:{s:>10}元/月,其他:{o:^10}元/月')
# 不足位使用其他字符填充,可以是需要的任意字符,通过例子可以看出这个填充的字符可以在对齐符号的前面或
# 者后面,但为了不出现特殊情况,如使用>/</^/=填充时,最好放在前面使用
print(f'工资收入:{g:<010}元/月,生活费:{s:>010}元/月,其他:{o:^010}元/月')
print(f'工资收入:{g:?<10}元/月,生活费:{s:0>10}元/月,其他:{o:0^10}元/月')
# 支持小数使用,前一个数字代表宽度,后一个代表小数点位数
print(f'工资收入:{g:10.2f}元/月,生活费:{s:>10}元/月,其他:{o:^10}元/月')

  

使用str.format()进行格式化,format前面{}中可以指定后面参数的顺序(按索引),也可以有对齐方式符号的使用

st = '你好意思hello'
print('{2}的{1}是{0}'.format(st[:2],st[2:4],st[4:]))

  

字符串方法

str1 = 'hello world'

print(str1.capitalize())  # capitalize()将字符串的第一个字符转换为大写
print(str1.center(19,'*'))  # center(width,fillchar)返回一个指定宽度的字符,返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格。
print(str1.count('o'))  # count(str, beg= 0,end=len(string)),返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数
bytes.decode(encoding="utf-8", errors="strict")  # Python3中没有decode方法,但我们可以使用bytes对象的decode()方法来解码给定的bytes对象,这个bytes对象可以由str.encode()来编码返回。
print(str1.encode(encoding='UTF-8',errors='strict'))  # 以encoding指定的编码格式编码字符串,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'
print(str1.endswith('he'))  # endswith(suffix, beg=0, end=len(string)),检查字符串是否以obj结束,如果beg或者end指定则检查指定的范围内是否以obj结束,如果是,返回True,否则返回False.
# startswith(substr, beg=0,end=len(string)), 检查字符串是否是以指定子字符串substr开头,是则返回True,否则返回False。如果beg和end指定值,则在指定范围内检查。
print(str1.expandtabs(tabsize=4))  # expandtabs(tabsize=8),把字符串string中的tab符号转为空格,tab符号默认的空格数是8。
print(str1.find('w'))  # find(str, beg=0, end=len(string)),检测str是否包含在字符串中,如果指定范围beg和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
print(str1.index('l'))  # index(str, beg=0, end=len(string)),跟find()方法一样,只不过如果str不在字符串中会报一个异常。
print(str1.isalnum())  # isalnum(),如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
print(str1.isalpha())  # isalpha(),如果字符串至少有一个字符并且所有字符都是字母或中文字则返回True, 否则返回False
print(str1.isdigit())  # isdigit(),如果字符串只包含数字则返回True 否则返回False.
print(str1.islower())  # islower(),如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False
print(str1.isnumeric())  # isnumeric(),如果字符串中只包含数字字符,则返回True,否则返回False
print(str1.isspace())  # isspace(),如果字符串中只包含空白,则返回True,否则返回False.
print(str1.istitle())  # istitle(),如果字符串是标题化的(见title())则返回True,否则返回False
print(str1.ljust(20,'&'))  # ljust(width[, fillchar]),返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格。
print('*'.join(str1))  # join(seq),以指定字符串作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串
# rfind(str, beg=0,end=len(string)),类似于 find()函数,不过是从右边开始查找.
# isupper(),如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False
# len(string),返回字符串长度
# lower(),转换字符串中所有大写字符为小写.
# split(str="", num=string.count(str)),以str为分隔符截取字符串,如果num有指定值,则仅截取num+1个子字符串
# strip([chars]),在字符串上执行lstrip()和rstrip()
# lstrip(),截掉字符串左边的空格或指定字符。
# rstrip(),删除字符串字符串末尾的空格.
# rindex( str, beg=0, end=len(string)),类似于 index(),不过是从右边开始.
# max(str),返回字符串 str 中最大的字母。
# min(str),返回字符串 str 中最小的字母。
# maketrans(),创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
# replace(old, new [, max]),把将字符串中的str1替换成str2,如果max指定,则替换不超过max次。
# rjust(width,[, fillchar]),返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串
# splitlines([keepends]),按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数keepends为False,不包含换行符,如果为True,则保留换行符。
# swapcase(),将字符串中大写转换为小写,小写转换为大写
# title(),返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见istitle())
# translate(table, deletechars=""),根据str给出的表(包含256个字符)转换string的字符, 要过滤掉的字符放到deletechars参数中
# upper(),转换字符串中的小写字母为大写
# zfill (width),返回长度为 width 的字符串,原字符串右对齐,前面填充0
# isdecimal(),检查字符串是否只包含十进制字符,如果是返回true,否则返回false。

列表(list)

列表的定义:使用[]来定义列表

增删改查

操作类型

方法名

功能

参数

返回值

append(data) 追加

在列表的末尾添加数据

data:加入到列表中的数据

None

extend(model)追加全部

在列表的末尾添加参数对象中的所有数据

model:保存有数据的存储模型,该模型接受列表、元组、集合类型的对象

None

insert(idx,data)插入

在列表的指定位置插入数据,如果索引位置超过列表数据总量,数据将插入到列表末尾

idx:插入数据的索引位置,data:加入列表中的数据

None

pop(idx)取出后删除

从列表中获取并删除指定索引位置上的数据,如果索引值超过列表数据总量将报错

idx:要从列表中获取的数据对应的索引位置

获取到的数据

del name_list

彻底删除列表

获取列表报错

clean()

强制清空列表

None

remove(data)删除

从列表中删除指定的数据,如果数据不存在将报错

data:要从列表中删除的数据

None

list[idx]='data'

修改指定位置的元素

list.reverse()

反向列表数据

list.sort(cmp=None, key=None, reverse=False)

将列表数据进行排序,默认为顺序排列

reverse=True为倒序排列

index(data)查询位置

查询列表中指定数据对应的索引,如果数据不存在将报错

data:在列表中要查询的数据

查询数据第一次出现的索引

count(data)统计数量

统计列表中指定数据出现的数量

data:在列表中要统计数量的数据

统计数据出现的次数

列表运算

列表的运算

运算类型

表达式

说明

加法运算

list1 + list2

将两个列表拼接成一个

乘法运算

list*num(int)

将一个列表中元素复制num个

成员运算

obj in list

使用成员运算符in或not in 判断某个元素是否存在在列表中(运算结果为bool值)

遍历(迭代)

for j in list:

使用for循环遍历出列表中的每个元素

列表函数

列表函数

函数方法

结果说明

len(list)

计算列表元素的个数

max(list)

返回列表中的最大值

min(list)

返回列表中的最大值

list(seq)

将一个可迭代类型转换为列表

深浅复制

import copy
li1 = [1,2,3,4,5]
li2 = [li1,'A','B','C','D','E']
print('源列表:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li2[0]),li2[0])

#浅复制
li3 = li2.copy()
li2[0][2] = '哈哈哈'
print('浅复制结果:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li3[0]),li3[0])
print(id(li3),li3)

  

import copy
li1 = [1,2,3,4,5]
li2 = [li1,'A','B','C','D','E']
print('源列表:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li2[0]),li2[0])

# 深复制
li4 = copy.deepcopy(li2)
li2[0][2] = '哈哈哈'
print('深复制结果:')
print(id(li1),li1)
print(id(li2),li2)
print(id(li4[0]),li4[0])
print(id(li4),li4)

   

深浅复制的区别:通过上面的结果显示浅复制后原来列表中元素发生了变化,但列表id没有变化,浅复制只是复制了原来列表的数据,并没有生成新的存储空间进行存储,在修改内部元素的时候原表数据同样发生变化,而深复制复制后的id发生了变化,说明深复制是复式并重新将复制的内容存储在新的空间,相当于重新开辟一个存储空间,所以改变内部列表元素只会在新空间存储的列表基础上修改内容,不会对原来列表数据进行修改。所以使用中为了保证数据源不被修改,要使用深复制。

元组(tuple)

元组(Tuple):元组的内容是不能改变的。元组元素只支持查看和del删除,虽然没有增删改,但这种数据类型保证了数据的安全性,可以防止数据被篡改。

元组的定义:使用圆括号定义元组,如果括号里面没有内容就是一个空的元组,同列表一样,我们可以将定义的元组赋值给一个变量,a = () ,元组中的每个元素对象之间也是用逗号隔开。

不一样的元组

一个元素的元组:元组中只有一个元素时,元素后面需要有逗号,否则数据类型不会被当作元组。

tup1,tup2 = ('鸣'),(1)
print('tup1的类型:',type(tup1),'\ntup2的类型:',type(tup2))

  ,

添加逗号后的结果:

tup1,tup2 = ('鸣',),(1,)
print('tup1的类型:',type(tup1),'\ntup2的类型:',type(tup2))

  

省略括号的元组:定义元组时,可以省略括号

a = '你好',3,['f',0.8,[8,0]],('世界观','人生观')
print(a)
print(type(a))

  

元组的函数

元组函数

函数方法

结果说明

len(tuple)

计算元组元素的个数

max(tuple)

返回元组中的最大值

min(tuple)

返回元组中的最大值

tuple(seq)

将一个可迭代类型转换为元组

元组的运算

元组的运算

运算类型

表达式

说明

加法运算

tuple1 + tuple2

将两个元组拼接成一个

乘法运算

tuple*num(int)

将一个元组中元素复制num个

成员运算

obj in tuple

使用成员运算符in或not in 判断某个元素是否存在在元组中(运算结果为bool值)

遍历(迭代)

for j in tuple:

使用for循环遍历出元组中的每个元素

序列类型的索引和切片

索引

在sequence(序列)中每个元素都对应一个下标,即索引。从第一个元素开始的索引按顺序是从0开始。

按顺序索引为从0开始的正数,按倒序索引为从-1开始的负数。如果索引写成-0则和索引为0的元素相同。

索引同时还支持运算

切片

Sequence特性的数据对象都支持切片操作。索引可以取出字符串中的某一个元素,切片则可以取出字符串中的一段元素。

切片的方法:[n:m] n表示切片的切取字符串元素的起始位置索引,m为结束元素的索引加1,切片同索引支持负数。

省略一个切片位置索引:[:m]表示切取字符串从开头到索引为m-1之间的元素

[n:]表示切取索引为n开始到结束的一段元素

切片后面可以有步长,步长表示每隔前一个索引加步长的位置取出元素:

li1 = [1,2,3,4,5]
li2 = [1,2,3,4,5,'A','B','C','D','E']
print(li2[1:9:3])

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值