python定义字符串变量有两种常用方式_五、Python高级变量类型

五、高级变量类型

5.1 序列

除了基本类型,python还提供了一种组合类型——序列类型(字符串、列表、元组)

序列

定界符

数据类型

可变性

字符串string

""或''

字符类型

不可

列表 list

[]

任意类型

元组 tuple

()

任意类型

不可

这些序列类型对象的共同特性是有序性,即数据元素的有序排列。这类对象支持两种基本操作:索引和分片

5.1.1 索引

索引格式:

序列对象[索引]

索引操作返回索引对应的数据元素

例子:

s='abcde'

print(s[2]) #输出c

字符串、列表和元组均支持双向索引。

5.1.2 分片

5.1.2.1 分片的格式

序列对象[起始索引:终止索引:步长]

起始索引:表示切片开始的位置,默认为0,即从第一个元素开始

终止索引:表示切片结束(但不包括)的位置,默认为对象的长度,即最后一个元素

步长:表示截取元素的间隔宽度,默认为1。当步长为正数时,表示从左到右切片,为负数时,表示从右到左切片。

注:切片操作返回的对象是从对象中截取的元素序列。但是如果切片范围越界。系统也不会抛出异常,而是仅截取有效部分或空序列。

alist = [1,2,3,4,5,6,7,8,9]

print(alist[:]) #输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

print(alist[1:3]) #输出:[2, 3]

print(alist[:3]) #输出:[1, 2, 3]

print(alist[3:]) #输出:[4, 5, 6, 7, 8, 9]

print(alist[0:9:2]) #输出:[1, 3, 5, 7, 9]

print(alist[-2::-2]) #输出:[8, 6, 4, 2]

print(alist[0:10]) #输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

5.1.2.2 分片的复制

分片的复制属于浅复制,即在引用层面上进行复制,但引用的元素并没有被复制。

例子1:

list1=['a','b','c','d']

list2=list1[0:2] #切片复制

print("修改前:")

print("list1:{}".format(list1))

print("list2:{}".format(list2))

list1[1]='B'

print("修改后:")

print("list1:{}".format(list1))

print("list2:{}".format(list2))

输出:

修改前:

list1:['a', 'b', 'c', 'd']

list2:['a', 'b']

修改后:

list1:['a', 'B', 'c', 'd']

list2:['a', 'b']

例子2:

这与直接使用赋值符号=进行复制的情况要区分开来。

list1=['a','b','c','d']

list2=list1 #赋值符号复制

print("修改前:")

print("list1:{}".format(list1))

print("list2:{}".format(list2))

list1[1]='B'

print("修改后:")

print("list1:{}".format(list1))

print("list2:{}".format(list2))

输出:

修改前:

list1:['a', 'b', 'c', 'd']

list2:['a', 'b', 'c', 'd']

修改后:

list1:['a', 'B', 'c', 'd']

list2:['a', 'B', 'c', 'd']

5.1.3 通用序列类型操作

序列相加

使用+号可以实现序列的相加,即对序列进行扩充

使用+进行扩充序列的地址会发生改变

序列相乘

序列可以与一个整数相乘得到一个新的序列,新序列为原序列的重复n次,若n<1,则回复空序列

序列比较

两个序列对象可以进行比较。比较时,先比较第一个元素,如果相等则继续比较第二个元素,以此类推,直至遇到不相等的元素为止

成员资格

使用in运算符可以检查一个值是否包含在一个序列中,即判断是否是序列的成员。

序列循环

可以使用循环结构遍历序列中的所有元素

遍历 就是 从头到尾 依次 从 序列中获取数据

在 循环体内部 针对 每一个元素,执行相同的操作

在 Python 中为了提高列表的遍历效率,专门提供的 迭代 iteration 遍历

使用 for 就能够实现迭代遍历

sequence = "1234" #或列表sequence=[1,2,3,4]或元组sequence=(1,2,3,4)

for i in sequence:

print(i,end="") #输出123

range对象

python range() 函数可创建一个整数列表,一般用在 for 循环中。

range(start=0, stop[, step])

属性说明:

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5

step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

常用的内置函数

函数

描述

len(sequence)

返回序列sequence中元素的个数

max(sequence)

返回序列sequence中元素的最大值

min(sequence)

返回序列sequence中元素最的小值

sum(sequence[,start

返回序列sequence中所有元素之和

sorted(iterable,[key

对可迭代对象iterable(如序列等)进行排序,返回的排序后的列表,

reversed(sequence)

返回序列sequence的反序列结果

del sequence[x]

删除序列sequence中第x个元素

sequence.count(obj)

统计obj在序列sequence上出现的次数

5.2 字符串

5.2.1 字符串的定义

字符串 就是 一串字符,是 最常用的数据类型。

在 Python 中可以使用 一对双引号 " 或者 一对单引号 ' 定义一个字符串

虽然可以使用 \" 或者 \' 做字符串的转义,但是在实际开发中:

如果字符串内部需要使用 ",可以使用 ' 定义字符串

如果字符串内部需要使用 ',可以使用 " 定义字符串

可以使用 索引 获取一个字符串中 指定位置的字符,索引计数从 0 开始

也可以使用 for 循环遍历 字符串中每一个字符

Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。

5.2.2 字符串常用的方法

判断类型

方法

说明

string.isspace()

如果 string 中只包含空格,则返回 True

string.isalnum()

如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True

string.isalpha()

如果 string 至少有一个字符并且所有字符都是字母则返回 True

string.isdecimal()

如果 string 只包含数字则返回 True,全角数字

string.isdigit()

如果 string 只包含数字则返回 True,全角数字、⑴、\u00b2

string.isnumeric()

如果 string 只包含数字则返回 True,全角数字,汉字数字

string.istitle()

如果 string 是标题化的(每个单词的首字母大写)则返回 True

string.islower()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True

string.isupper()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True

查找和替换

方法

说明

string.startswith(str)

检查字符串是否是以 str 开头,是则返回 True

string.endswith(str)

检查字符串是否是以 str 结束,是则返回 True

string.find(str, start=0, end=len(string))

检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1

string.count(sub,start,end)

统计字符串sub在string中从start到end范围出现的次数,返回次数。

string.rfind(str, start=0, end=len(string))

类似于 find(),不过是从右边开始查找

string.index(str, start=0, end=len(string))

跟 find() 方法类似,不过如果 str 不在 string 会报错

string.rindex(str, start=0, end=len(string))

类似于 index(),不过是从右边开始

string.replace(old_str, new_str, num=string.count(old))

把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次

大小写转换

方法

说明

string.capitalize()

把字符串的第一个字符大写

string.title()

把字符串的每个单词首字母大写

string.lower()

转换 string 中所有大写字符为小写

string.upper()

转换 string 中的小写字母为大写

string.swapcase()

翻转 string 中的大小写

文本对齐

方法

说明

string.ljust(width)

返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

string.rjust(width)

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

string.center(width)

返回一个原字符串居中,并使用空格填充至长度 width 的新字符串例子:print("asdfas".center(20,"*"))

去除空白字符

方法

说明

string.lstrip()

截掉 string 左边(开始)的空白字符

string.rstrip()

截掉 string 右边(末尾)的空白字符

string.strip()

截掉 string 首位两边的空白字符

拆分和连接

方法

说明

string.partition(str)

把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面)

string.rpartition(str)

类似于 partition() 方法,不过是从右边开始查找

string.split(str="", num)

以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 '\r', '\t', '\n' 和空格,返回分隔结果的列表

string.splitlines()

按照行('\r', '\n', '\r\n')分隔,返回一个包含各行作为元素的列表

string.join(sequence)

以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串.

s1="Hello "

s2 = "World !"

s3 =''.join([s1,s2])

print(s3)

alist=["mail","qq","com"]

s5 = ','.join(alist)

print(s5)

其他方法

方法

说明

str.translate(table)

按table规定的字符串映射转换表转换str字符串中的字符

str.maketrans(intab, outtab)

用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。intab -- 字符串中要替代的字符组成的字符串。outtab -- 相应的映射字符的字符串。

注:两个字符串的长度必须相同,为一一对应的关系。

intab = "1234567"

outtab = "abcdefg"

trantab = str.maketrans(intab,outtab)#利用maketrans函数创建字符映射转换表

m = "1234567hijklmn"#解密前

w = m.translate(trantab)#解密后

print(w)

5.2.3 字符串转义字符

在需要在字符中使用特殊字符时,python 用反斜杠\转义字符。如下表:

转义字符

描述

(在行尾时)

续行符

\

反斜杠符号

'

单引号

"

双引号

\a

响铃

\b

退格(Backspace)

\e

转义

\000

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数,y 代表 0~7 的字符,例如:\012 代表换行。

\xyy

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

\other

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

5.2.4 字符串格式化输出

字符串格式化即按指定格式输出字符串。python支持两种格式化方法:一种是%格式化方法,另一种是format格式化方法

%格式化方法

符 号

描述

%c

格式化字符及其ASCII码

%s

格式化字符串

%d

格式化十进制整数

%b

格式化二进制整数

%o

格式化八进制整数

%x

格式化十六进制整数

%u

格式化无符号整型

%o

格式化无符号八进制数

%x、%X

格式化无符号十六进制数

%f、%F

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

%e、%E

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

%g、%G

根据显示长度自动选择是指数还是浮点数

格式化输出详细

例子:

print("%s %s \"%d\"" %('Hello',"World",2021) )

输出:

Hello World "2021"

format格式化方法

format用传入的参数依次代替字符串内的占位符。占位符可以是{},也可以依次为{0},{1},{2},……的编号,还可以是具有意义的标识符,如{name},{age}等

例子:

info = "学生:{}——{}——{}".format("张三",18,"男")

print(info)

info = "学生:{0}——{1}——{2}".format("张三",18,"男")

print(info)

info = "学生:{name}——{age}——{sex}".format(name="张三",age=18,sex="男")

print(info)

格式化输出详情

例子:

print("{0:d},{0:b},{0:o},{0:x}".format(15))

#加“#”输出前缀区分整数的进制

print("{0:d},{0:#b},{0:#o},{0:#x}".format(15))

#字符串和字符型的格式字符

print("{:s} World {:c}".format("Hello",33))

#宽度设置,对齐方式设置

print("{0:10f},{0:<10f},{0:^10f},{0:>10f}".format(2.3456))

#宽度设置,对齐方式设置

print("{:+010.2f}".format(2.3456))

#分隔符设置

print("{:>+015,.2f}".format(10000000.0))

5.3 列表

List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组

专门用于存储 一串信息

列表用 [] 定义,数据 之间使用 , 分隔

列表的数据项不需要具有相同的类型,可以是任意类型

列表具有的两种特性:有序性、可变性

列表的 索引 从 0 开始

索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标

注意:从列表中取值时,如果 超出索引范围,程序会报错

示例:

student1 = ["Tom",18,'T']

student2 = ["May",19,'M']

studnrts = [student1,student2]

print(studnrts)

list1=[]#创建空列表

list2=list()#使用list()创建空列表

alist = list("abcd")#用list函数将字符串转换为列表

print(alist)

string = "".join(alist)#用join函数将列表中的元素合并为字符串

print(string)

列表的方法

方法

描述

list.insert(index,obj)

将对象obj插入列表list指定的位置index,其后的所有元素后移一个位置,无返回值

list.append(obj)

在列表list的末尾追加一个元素obj,无返回值,list被修改

list.extend(sequence)

将序列sequence的元素依次加入列表list的末尾,无返回值,list被修改。加入的sequence可以是任意的序列。

list.remove(obj)

将列表list中的值为obj元素删除,无返回值

list.pop(index)

删除列表list中编号为index的元素,index的默认值为-1,即删除最后一个元素,该方法返回被删除元素的值

list.clear()

清空list,无返回值,list被清空

list.index(obj)

查找list中obj的元素,返回该元素第一次出现的索引;若不存在该元素,则抛出异常

list.copy()

复制列表list,返回list的拷贝。copy()的复制是浅复制,这与使用分片复制列表是等价的。

列表遍历

使用``for`遍历

list=[1,2,3,4,5]

for obj in list:

print(obj,end='')

使用利用python内置函数enumerate(sequence, [start=0])列举出list中的数

参数

sequence -- 一个序列、迭代器或其他支持迭代对象。

start -- 下标起始位置。

list=[1,2,3,4,5]

for obj in enumerate(list):

print(obj,end='')

(0, 1)(1, 2)(2, 3)(3, 4)(4, 5)

使用iter(object[, sentinel])迭代器

参数

object -- 支持迭代的集合对象。

sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。

list=[1,2,3,4,5]

for obj in iter(list):

print(obj,end='')

使用range(start, stop[, step])

list=[1,2,3,4,5]

for obj in range(len(list)):

print(list[obj],end='')

5.4 元组

Tuple(元组)与列表类似,不同之处在于元组的 元素不能修改

元组 表示多个元素组成的序列

元组 在 Python 开发中,有特定的应用场景

常用于元素为常量以及主要执行索引或分片操作的应用场合

由于元组的不可变性,元组可以作为字典中的键,可以作为集合中的元素而列表不行。

让列表不可以被修改,以保护数据安全

格式字符串,格式化字符串后面的 () 本质上就是一个元组

用于存储 一串 信息,数据 之间使用 , 分隔

元组用 () 定义

元组的 索引 从 0 开始

索引 就是数据在 元组 中的位置编号

tuple1 = ("zhangsan", 18, 1.75,["math",60,"englist",12])

tuple2 = 1,2,3,"a"#可省略(),系统自动添加

tuple3 = ()#创建空元组

tuple4 = (10,)#当元组中只包含一个元素时,需要在元素后面添加逗号

可以使用tuple()函数将其他类型的序列转换为元组

5.6 字典

dictionary(字典) 是 除列表以外 Python 之中 最灵活 的数据类型

字典同样可以用来 存储多个数据

通常用于存储 描述一个 物体的相关信息

和列表的区别

列表 是 有序 的对象集合

字典 是 无序 的对象集合

字典用 {} 定义

字典使用 键值对 存储数据,键值对之间使用 , 分隔

键 key 是索引

值 value 是数据

键 和 值 之间使用 : 分隔

键必须是唯一的

值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组

student1 = {'name':'lin','age':18,'sex':'man'}

student2 = dict(name='jin',age=18,sex='man')

dict1={}

dict2=dict()

字典的常用方法

读取

方法名

描述

dict[key]

访问字典dict中关键字key对应的元素值,字符型加引号

dict.get(key[,defaulet])

返回字典dict中关键字key对应的元素值,若key不存在,则返回default的值,没有设置default值时返回None。

dict.setdefault(key, default=None)

和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

dict.items()

返回字典dict中所有元素(关键字,值)

dict.keys()

返回字典dict中的所有关键字

dict.valuse()

返回字典dict中的所有值

增删改

方法名

描述

dict[key]=value

修改字典dict中关键字key的对应元素值。当关键字不存在时,则往dict中添加一个新元素

dict1.update(dict2)

把字典dict2的键/值对更新到dict1里,如果dict2中的关键字在dict1中存在,则修改dict1中对应的元素值,否则将该元素插入dict1中

dict.pop(key[,defaulet])

删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

dict.popitem()

返回并删除字典中的最后一对键和值。

del dict[key]/del dict

删除字典dict中key对应的元素,或者删除整个字典

dict.clear()

清空dict字典

dict.fromkeys(sequence[,value])

创建一个新字典,以序列 sequence中元素做字典的键,val 为字典所有键对应的初始值,无value则默认为None,返回一个字典

key in dict

判断key是否在字典dict中

字典的应用场景

尽管可以使用 for in 遍历 字典

但是在开发中,更多的应用场景是:

使用 多个键值对,存储 描述一个 物体 的相关信息 —— 描述更复杂的数据信息

将 多个字典 放在 一个列表 中,再进行遍历,在循环体内部针对每一个字典进行 相同的处理

card_list = [{"name": "张三",

"qq": "12345",

"phone": "110"},

{"name": "李四",

"qq": "54321",

"phone": "10086"}

]

5.7 集合

集合(set)是一个无序的不重复元素序列。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

set1 = {1,2,3,4,1}

set2 = set()

print(set1)

A = set("abcdea")#输出{'b', 'd', 'c', 'a', 'e'}里面的元素时随机的顺序

print(A)

B = set([1,2,3,4,5,6,1])#输出{1, 2, 3, 4, 5, 6}

print(B)

增删改方法

方法名

描述

set.add(elem)

往集合set中添加数据元素elem。若set中已有elem则不添加

set.remove(elem)

删除集合set中指定元素elem。若elem不存在则会抛出异常

set.discard(elem)

删除集合set中指定元素elem。若elem不存在不会报错

set.pop()

随机删除集合set中一个元素,并返回该元素

set1.update(set2)

用于修改set1集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。

set.copy()

用于拷贝一个集合

交并差方法

方法名

描述

set1.difference(set2)/使用set1-set2代替一样

返回集合的差集,即返回的集合元素包含在set1集合中,但不包含在set2集合(方法的参数)中,返回一个移除相同元素的新集合

set1.difference_update(set2)

difference_update方法是直接在set1集合中移除元素,没有返回值。

set1.intersection(set2[,set3])/使用set1&set2代替一样

返回两个或更多集合中都包含的元素,即交集。返回一个新的集合

set1.intersection_update(set2[,set3])

intersection_update() 方法是在set1的集合上移除不重叠的元素

set1.symmetric_difference(set2)/使用set1^set2代替一样

返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。返回一个新的集合。

set1.symmetric_difference_update(set2)

symmetric_difference_update()方法移除set1集合中在set2集合相同的元素,并将set2集合中不同的元素插入到set1集合中。

set1.union(set2)/使用set1|set2代替一样

方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。返回一个新集合。

判断集合元素

方法名

描述

set1.isdisjoint(set2)

判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。

set1.issubset(set2)

判断set1集合的所有元素是否都包含在set2集合中,如果是则返回 True,否则返回 False。

set1.issuperset(set2)

判断set2集合的所有元素是否都包含在set1集合中,如果是则返回 True,否则返回 False。

集合的遍历

aset={1,2,3,4,5}

for elem in aset:

print(i)

12345

start在之和的基础上加start值 ↩︎

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序 ↩︎

reverse -- 排序规则:reverse = True 降序 , reverse = False 升序(默认) ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值