Python基础之元组与集合
1.元组 tuple
元组与列表类似,但元组不可增删改,因此没有list应用广泛
(1) 元组的创建
元组创建直接使用tuple = (item1,item2,...,itemn)
创建即可
tuple1 = (10, 20, 30)
print(tuple1)
# (10, 20, 30)
如果有人问列表的标志是方括号[]
,字典的标志是花括号{}
,那元组的标志是什么?
一定会有人回答是小括号()
但实际上。。。
大错特错
话不多说举例为证
tuple1 = (10)
print(type(tuple1))
tuple2 = (10,)
print(type(tuple2))
tuple3 = 10, 20
print(type(tuple3))
# <class 'int'>
# <class 'tuple'>
# <class 'tuple'>
根据上例,如果括号里只包含一个数字,系统会默认其为整型;而在数字后加个逗号则会使系统明白此时是创建的只有一个元素的元组。同样,如果不加括号,多个元素使用逗号同时赋值给一个变量,系统也会认为此变量为元组。
因此,元组的标志不是小括号而是**逗号
**
(2) 元组的赋值
根据上例元组的标志,会发现元组的标志是逗号而不是小括号, 且小括号可以省略,因此赋值也可以省略为 变量1, 变量2 = item1, item2
等价于 (变量1, 变量2) = (item1, item2)
,两者实际上均为元组间赋值
例
w, h = (200, 300)
print(w, h)
# 200 300
# 等价于
(w, h) = (200, 300)
print(w, h)
# 200 300
(3) 元组的访问
分为两种方法,一为访问下标读取单个元素,二为元组切片访问,访问指定数段的下标值对应的数据
具体操作与列表相同,详细请参考Python基础之列表List中的列表的数据提取部分
(4) 元组的拼接
元组是只读的,不允许修改增加,因此使用tuple[index] = item
修改数据是会出现异常的。但元组支持元组之间的拼接,可以变相的增加元组元素。
元组拼接语法:
tuple = tuple1 + tuple2
例
tuple1 = (10, 20)
tuple2 = (20, 30)
tuple3 = tuple1 + tuple2
print(tuple3)
# (10, 20, 20, 30)
(5)元组的删除
元组不允许删除其中元素,但可以删除整个元组对象
例
tuple1 = 10, 20, 30
print(tuple1)
del tuple1
print(tuple1)
# (10, 20, 30)
# NameError: name 'tuple1' is not defined
注意:一旦删除元组对象,再次访问该元组就回抛出NameError
命名异常
(6)元组遍历
同列表遍历相同
tuple1 = 10, 20, 30
for item in tuple1:
print(item)
# 10
# 20
# 30
(7)其他操作
操作1:len(tuple)
求长度
tuple1 = 10, 20, 30
print(len(tuple1))
# 3
操作2:max(tuple)
求最大值
tuple1 = 10, 20, 30
print(max(tuple1))
# 30
操作3:min(tuple)
求最小值
tuple1 = 10, 20, 30
print(min(tuple1))
# 10
2.集合
集合是一个元素不重复且无序的序列
(1) 集合的创建
parame = {value01,value02,...}
或者set(value)
注意:当创建一个空集合时应使用set()
而不是{}
,后者创建了一个空字典而不是空集合
set1 = {}
print(type(set1))
# <class 'dict'>
set2 = set()
print(type(set2))
# <class 'set'>
# 集合创建时默认将重复元素去除
set1 = {1, 2, 3, 4, 5, 4}
print(set1)
print(len(set1))
# {1, 2, 3, 4, 5}
# 5
#创建一个值的集合
my_set = set(('apple',))
print(my_set)
# {'apple'}
# 创建多个值的集合
my_set = set(('apple','pear','banana'))
print(my_set)
# {'pear', 'banana', 'apple'}
# 应尽量避免如此创建
my_set = set('apple')
print(my_set)
# {'p', 'l', 'e', 'a'}
(2)集合间的运算
set1 = {1, 2, 3, 4, 5, 4}
set2 = {1, 2, 5, 7, 9, 10}
# 差
print(set1 - set2)
# 交
print(set1 & set2)
# 并
print(set1 | set2)
# 补
print(set1 ^ set2)
# {3, 4}
# {1, 2, 5}
# {1, 2, 3, 4, 5, 7, 9, 10}
# {3, 4, 7, 9, 10}
(3)集合数据的增加
方法一:set.add(item)
,向集合中添加一个值,如果元素已存在,则不进行任何操作
set1 = {"class1", "class2", "class3"}
set1.add("class4")
print(set1)
# {'class1', 'class4', 'class2', 'class3'}
方法二:s.update( item )
,item的值可以为列表、元组、字典等
但注意,如果以字符串形式添加,系统会将字符串看做一个可迭代对象,并将其中字母拆分一一放入集合
set1 = {"class1", "class2", "class3"}
set1.update(["class4", "class5"])
print(set1)
# {'class4', 'class3', 'class2', 'class5', 'class1'}
# 应避免如此
set1.update("class6")
print(set1)
# {'class3', 'c', 'class5', 's', 'class4', '6', 'l', 'a', 'class2', 'class1'}
(4)集合数据的删除
方法一:set.remove(item)
将元素 item添加到集合中移除,如果元素不存在,则会发生错误
set1 = {1, 2, 3}
set1.remove(1)
print(set1)
# {2, 3}
set1.remove(10)
# KeyError: 10
方法二:set.discard( item )
将元素 item添加到集合中移除,如果元素不存在,不会发生错误
set1 = {1, 2, 3}
set1.discard(1)
print(set1)
# {2, 3}
set1.discard(10)
# 无输出
方法三:set.pop()
随机删除一个元素 ,并返回
set1 = {1, 2, 3}
print(set1.pop())
print(set1)
# 1
# {2, 3}
方法四:set.clean()
清空集合
set1 = {1, 2, 3}
set1.clear()
print(set1)
# set() 空集合
(5) 集合的遍历
set1 = {"class1", "class2", "class3"}
for item in set1:
print(item, end=" ")
# class1 class3 class2
(6)其他操作
操作1:len(set)
求长度
set1 = {"class1", "class2", "class3"}
print(len(set1))
# 3
操作2:set1.difference(set2)
比较set1与set2间的不同,并返回set1中不同的元素
set1 = {"class1", "class2", "class3"}
set2 = {"class1", "class2", "class4"}
print(set1.difference(set2))
# {'class3'}
操作3:set.copy() 复制当前集合,返回新的集合
set1 = {"class1", "class2", "class3"}
set2 = set1.copy()
print(set2)
# {'class2', 'class3', 'class1'}