set集合

Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同
感觉集合使用的非常的少

从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:

{element1,element2,…,elementn}
elementn 表示集合中的元素,个数没有限制
从内容上看,同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误
并且需要注意的是,数据必须保证是唯一的,因为集合对于每种数据元素,只会保留一份。
由于 Python 中的 set 集合是无序的,所以每次输出时元素的排序顺序可能都不相同。

创建set集合

Python 提供了 2 种创建 set 集合的方法,分别是使用 {} 创建和使用 set() 函数将列表、元组等类型数据转换为集合。

使用 {} 创建

在 Python 中,创建 set 集合可以像列表、元素和字典一样,直接将集合赋值给变量,从而实现创建集合的目的
语法格式:setname = {element1,element2,…,elementn}

setname 表示集合的名称,起名时既要符合 Python 命名规范,也要避免与 Python 内置函数重名。

set()函数创建集合

set() 函数为 Python 的内置函数,其功能是将字符串、列表、元组、range 对象等可迭代对象转换成集合
语法格式:setname = set(iteration)
iteration 就表示字符串、列表、元组、range 对象等数据。

1
2
3
4
5
6
set1 = set("c.biancheng.net")
set2 = set([1,2,3,4,5])
set3=set((1,2,3,4,5))
print("set1:",set1)
print("set2:",set2)
print("set3:",set3)

注意,如果要创建空集合,只能使用 set() 函数实现。因为直接使用一对 {},Python 解释器会将其视为一个空字典。

访问set集合元素

由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素。Python 中,访问集合元素最常用的方法是使用循环结构,将集合中的数据逐一读取出来。

1
2
3
a = {1,'c',1,(1,2,3),'c'}
for ele in a:
print(ele,end=' ')
删除set集合

和其他序列类型一样,手动函数集合类型,也可以使用 del() 语句

向 set 集合中添加元素:add()

set 集合中添加元素,可以使用 set 类型提供的 add() 方法实现
语法格式:
setname.add(element)

setname 表示要添加元素的集合
element 表示要添加的元素内容

1
2
3
4
set3=set((1,2,3,4,5))
print("set1:",set3)
set3.add(8)
print(set3)

需要注意的是,使用 add() 方法添加的元素,只能是数字、字符串、元组或者布尔类型(True 和 False)值,不能添加列表、字典、集合这类可变的数据,否则 Python 解释器会报 TypeError 错误

当成整体添加进去的

从set集合中删除元素:remove()

删除现有 set 集合中的指定元素,可以使用 remove() 方法
语法格式:
setname.remove(element)

使用此方法删除集合中元素,需要注意的是,如果被删除元素本就不包含在集合中,则此方法会抛出 KeyError 错误

可以使用 discard() 方法,此方法和 remove() 方法的用法完全相同,唯一的区别就是,当删除集合中元素失败时,此方法不会抛出任何错误。

set集合做交集、并集、差集运算

c9d93e16d9be661d5f1b99511529f6d0.png

set集合方法

4ee7f45f9f2aca4af266ff1ee5bd8606.png
1916ac8b80a2a3117eb9a155e2744478.png

拷贝

浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用
对数据采用浅拷贝的方式时,如果原对象中的元素不可变,那倒无所谓;但如果元素可变,浅拷贝通常会出现一些问题

深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。

字符串拼接

在 Python 中拼接(连接)字符串很简单,可以直接将两个字符串紧挨着写在一起
strname = “str1” “str2”

strname 表示拼接以后的字符串变量名
str1 和 str2 是要拼接的字符串内容
使用这种写法,Python 会自动将两个字符串拼接在一起

1
2
a = "hello" " xiaoyang"
print(a)

需要注意的是,这种写法只能拼接字符串常量,如果需要使用变量,就得借助+运算符来拼接

1
2
3
4
str1 = "nihao"
str2 = " xiaoyang"
a = str1+str2
print(a)
字符串和数字的拼接

Python 不允许直接拼接数字和字符串,所以我们必须先将数字转换成字符串。
可以借助 str() 和 repr() 函数将数字转换为字符串
str(obj)
repr(obj)
obj 表示要转换的对象,它可以是数字、列表、元组、字典等多种类型的数据。

1
2
3
4
5
str1 = "hello "
str2 = "岁的漂亮鬼"
year =18
n = str1 + str(year) + str2
print(n)
截取字符串(字符串切片)

字符串是由多个字符构成的,字符之间是有顺序的,这个顺序号就称为索引(index)。Python 允许通过索引来操作字符串中的单个或者多个字符,比如获取指定索引处的字符,返回指定字符的索引值等。

获取单个字符
知道字符串名字以后,在方括号[ ]中使用索引即可访问对应的字符
语法格式:
strname[index]
strname 表示字符串名字,index 表示索引值。
Python 允许从字符串的两端使用索引:
当以字符串的左端(字符串的开头)为起点时,索引是从 0 开始计数的;字符串的第一个字符的索引为 0,第二个字符的索引为 1,第三个字符串的索引为 2 ……
当以字符串的右端(字符串的末尾)为起点时,索引是从 -1 开始计数的;字符串的倒数第一个字符的索引为 -1,倒数第二个字符的索引为 -2,倒数第三个字符的索引为 -3 ……

1
2
str1 = "hello"
print(str1[1])

获取多个字符(字符串截去/字符串切片)
使用[ ]除了可以获取单个字符外,还可以指定一个范围来获取多个字符,也就是一个子串或者片段
strname[start : end : step]

strname:要截取的字符串
start:表示要截取的第一个字符所在的索引(截取时包含该字符)。如果不指定,默认为 0,也就是从字符串的开头截取
end:表示要截取的最后一个字符所在的索引(截取时不包含该字符)。如果不指定,默认为字符串的长度;
step:指的是从 start 索引处的字符开始,每 step 个距离获取一个字符,直至 end 索引出的字符。step 默认值为 1,当省略该值时,最后一个冒号也可以省略。

1
2
3
str1 = "hello "
print(str1[0:3])
print(str1[-4:-1])
len()函数和encode()函数

python 中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用 len 函数。

语法格式:
len(string)
string 用于指定要进行长度统计的字符串。

在实际开发中,除了常常要获取字符串的长度外,有时还要获取字符串的字节数。
在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小数点、下划线以及空格,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式

encode() 方法,将字符串进行编码后再获取它的字节数

1
2
str1 = "人生苦短,我用Python"
len(str1.encode())
split()方法

split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。

语法格式:str.split(sep,maxsplit)
str:表示要进行分割的字符串;

sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等

maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为 maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制。

1
2
str1 = "hello I am your brother"
print(str1.split())

在未指定 sep 参数时,split() 方法默认采用空字符进行分割,但当字符串中有连续的空格或其他空字符时,都会被视为一个分隔符对字符串进行分割,

join()方法

使用 join() 方法合并字符串时,它会将列表(或元组)中多个字符串采用固定的分隔符连接在一起。

语法格式:newstr = str.join(iterable)

newstr:表示合并后生成的新字符串
str:用于指定合并时的分隔符
iterable:做合并操作的源字符串数据,允许以列表、元组等形式提供

1
2
3
list = ["www","xiaoyangzst","vercel","app"]
a ='.'.join(list)
print(a)
count()方法

count 方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数。
语法格式:
str.count(sub[,start[,end]])

str:表示原字符串;
sub:表示要检索的字符串;
start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。

1
2
3
4
5
6
list = ["www","xiaoyangzst","vercel","app"]
a ='.'.join(list)
print(a)
print()
c=a.count('.')
print(c)
find()方法和index()方法

find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。
语法格式:
str.find(sub[,start[,end]])
str:表示原字符串;
sub:表示要检索的目标字符串;
start:表示开始检索的起始位置。如果不指定,则默认从头开始检索;
end:表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。

1
2
3
4
list = ["www","xiaoyangzst","vercel","app"]
a ='.'.join(list)
c=a.find('.')
print(c)

同 find() 方法类似,index() 方法也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index() 方法会抛出异常。
语法格式:
str.index(sub[,start[,end]])
str:表示原字符串;
sub:表示要检索的子字符串;
start:表示检索开始的起始位置,如果不指定,默认从头开始检索;
end:表示检索的结束位置,如果不指定,默认一直检索到结尾。

1
2
3
4
5
6
list = ["www","xiaoyangzst","vercel","app"]
a ='.'.join(list)
print(a)
print()
c = a.index('.')
print(c)