python学习05——元组和集合

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}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值