1. 元组
元组是python
内置数据结构,是一个不可变序列。
可变序列和不可变序列的区别:
- 可变序列:列表、字典,可以对序列进行增、删、改操作,而不改变原序列的地址
- 不可变序列:字符串、元组,没有增、删、改操作
元组的设计初衷是在多线程对序列进行操作时,减少锁的依赖。
1.1 元组的创建
1.1.1 使用()
创建
myTuple = ("hello", 2022, "world")
print(myTuple) # ('hello', 2022, 'world')
print(type(myTuple)) # <class 'tuple'>
其中,当元组元素大于一个时,可以省略()
:
myTuple = "hello", 2022, "world"
print(myTuple) # ('hello', 2022, 'world')
print(type(myTuple)) # <class 'tuple'>
但是当元素只有一个的时候,不能省略()
和,
:
''' 元组只有一个元素时'''
# 直接创建时是字符串
myTuple = "hello"
print(myTuple) # hello
print(type(myTuple)) # <class 'str'>
# 用()包裹后,创建的也是字符串!!!!!!!!
myTuple = ("hello") # hello
print(myTuple)
print(type(myTuple)) # <class 'str'>
# 必须加上(,),才是元组
myTuple = ("hello",)
print(myTuple) # ('hello',)
print(type(myTuple)) # <class 'tuple'>
1.1.2 使用内置函数tuple()
创建
myTuple = tuple(("hello", 2022, "world"))
print(myTuple) # ('hello', 2022, 'world')
print(type(myTuple)) # <class 'tuple'>
1.2 元组的获取和遍历
myTuple = "hello", 2022, "world"
# 元组内容的获取
print(myTuple[0]) # hello
print(myTuple[1]) # 2022
print(myTuple[2]) # world
# 元组的遍历
for item in myTuple:
print("item: ", item)
'''
输出:
item: hello
item: 2022
item: world
'''
2. 集合
python
中的集合类似于Java
中的无序列表set
。
集合的特点:
- 可变序列
- 无序序列
- 元素不可重复
2.1 集合的创建
2.1.1 使用{}
创建
使用{}
可创建集合,但不可创建空集合,因为空的{}
创建的数据类型是字典。
mySet = {78, 1, 2, 3, 4, 5, 5, 5, 56}
print(mySet) # {1, 2, 3, 4, 5, 56, 78} 无序,元素不重复
print(type(mySet)) # <class 'set'>
myObj = {}
print(type(myObj)) # <class 'dict'> 类型是dict!!!!
2.1.2 使用内置函数set()
使用内置函数set{}
,也可以创建集合。
# 常规创建
mySet = set({1, 2, 3, 4})
print(mySet) # {1, 2, 3, 4}
print(type(mySet)) # <class 'set'>
# 使用range创建
mySet = set(range(5))
print(mySet) # {0, 1, 2, 3, 4}
print(type(mySet)) # <class 'set'>
# 列表转换成集合
mySet = set([1, 2, 3, 4])
print(mySet) # {1, 2, 3, 4}
print(type(mySet)) # <class 'set'>
# 元组转换成集合
mySet = set((1, 2, 3, 4))
print(mySet) # {1, 2, 3, 4}
print(type(mySet)) # <class 'set'>
# 创建空集合
mySet = set({})
print(mySet) # set()
print(type(mySet)) # <class 'set'>
2.2 集合的判断与操作
2.2.1 元素的判断
mySet = {1, 2, 3, 4, 5}
print(mySet) # {1, 2, 3, 4, 5}
print(100 in mySet) # False
print(100 not in mySet) # True
2.2.2 增加元素
使用add()
增加一个元素,使用update()
增加多个元素,其中update()
参数可以传列表、元组、集合等数据类型。
mySet = {1, 2, 3, 4, 5}
print(mySet) # {1, 2, 3, 4, 5}
# 增加一个元素
mySet.add("hello")
print(mySet) # {1, 2, 3, 4, 5, 'hello'}
# 增加多个元素
mySet.update({4, 5, 6, 7, 8, 9})
print(mySet) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 'hello'}
2.2.3 删除元素
2.2.3.1 remove()
remove()
删除指定元素,若元素不存在,则抛出异常。
mySet = {100, 200, 300, 400, 500}
print(mySet) # {400, 100, 500, 200, 300}
# 删除指定元素
mySet.remove(200)
print(mySet) # {400, 100, 500, 300}
# 元素不存在 抛出异常
# mySet.remove(50) KeyError: 50
2.2.3.2 discard()
discard()
删除指定元素,若元素不存在,不抛出异常。
mySet = {100, 200, 300, 400, 500}
print(mySet) # {400, 100, 500, 200, 300}
# 删除指定元素
mySet.discard(200)
print(mySet) # {400, 100, 500, 300}
# 元素不存在 不抛出异常
mySet.discard(50)
print(mySet) # {400, 100, 500, 300}
2.2.3.3 pop()
pop()
任意删除一个元素。
mySet = {100, 200, 300, 400, 500}
print(mySet) # {400, 100, 500, 200, 300}
# 任意删除指定元素
mySet.pop()
print(mySet) # {100, 500, 200, 300}
2.2.3.4 clear()
clear()
是清空元素。
mySet = {100, 200, 300, 400, 500}
print(mySet) # {400, 100, 500, 200, 300}
# 任意删除指定元素
mySet.clear()
print(mySet) # set()
2.3 集合之间的关系
2.3.1 集合之间是否相等
如果两个集合中的元素数量和值都相等,则可以用==
判断两个集合是否相等。
s1 = {1, 2, 3, 4}
s2 = {4, 3, 2, 1}
print(s1 == s2) # True
2.3.2 集合是否是子集
判断一个集合是否是另外一个集合的子集用issubset()
进行判断。
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {3, 4, 5}
s3 = {2, 100}
print(s2.issubset(s1)) # True
print(s3.issubset(s1)) # False
2.3.3 集合是否是超集
判断一个集合是否是另外一个集合的超集用issuperset()
进行判断。
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {3, 4, 5}
s3 = {2, 100}
print(s1.issuperset(s2)) # True
print(s1.issuperset(s3)) # False
2.3.4 判断两个集合是否没有交集
使用isdisjoint()
来判断两个集合是否没有交集!!
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {3, 4, 5}
s3 = {100, 200}
print(s1.isdisjoint(s2)) # False 有交集是False
print(s1.isdisjoint(s3)) # True
2.4 集合的数据操作
2.4.1 交集
使用intersection()
或&
来求两个集合的交集:
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1.intersection(s2)) # {3, 4}
print(s1 & s2) # {3, 4}
2.4.2 并集
使用union()
或|
来求两个集合的交集:
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1.union(s2)) # {1, 2, 3, 4, 5, 6}
print(s1 | s2) # {1, 2, 3, 4, 5, 6}
2.4.3 差集
求某个集合和另一个集合比较后的差集,使用difference()
或-
:
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1.difference(s2)) # {1, 2}
print(s1 - s2) # {1, 2}
2.4.4 全差集
求两个集合的全差集,使用difference()
或-
:
s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}
print(s1.symmetric_difference(s2)) # {1, 2, 5, 6}
print(s1 ^ s2) # {1, 2, 5, 6}
2.5 集合生成式
集合的生成式为:
{i表达式 for i in range(X)}
举例:
mySet = {i for i in range(10)}
print(mySet) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
# 表达式
mySet = {i*2 for i in range(10)}
print(mySet) # {0, 2, 4, 6, 8, 10, 12, 14, 16, 18}