Python学习第七天
元组
内置数据结构之一,是一个不可变序列,用()
表示。
元组的创建
- 直接使用
()
t = (10, 20, 30, 40)
print(t)
print(type(t))
####
(10, 20, 30, 40)
<class 'tuple'>
- 使用内置函数
tuple()
t1 = tuple((10,))
print(t1)
t2 = tuple('hello')
print(t2)
t3 = tuple([10, 20, 30, 40])
print(t3)
t4 = tuple({"张三": 100, "李四": 98})
print(t4)
####
(10,)
('h', 'e', 'l', 'l', 'o')
(10, 20, 30, 40)
('张三', '李四')
- 当只有一个元素时
使用小括号时需要加一个,
t = (10,)
print(t)
- 空元组
t1 = ()
print(t1)
t2 = tuple()
print(t2)
####
()
()
元组的遍历
可以使用索引进行遍历,也可以使用for..in
遍历。
t = (20, 'python', [1, 2, 3])
for item in t:
print(item)
####
20
python
[1, 2, 3]
集合
内置数据结构,与列表、字典一样属于可变序列,是没有value的字典,集合中的元素不允许重复。
集合的创建方式
- 使用
{}
s = {1, 2, 3, 4}
print(s)
print(type(s))
####
{1, 2, 3, 4}
<class 'set'>
- 使用内置函数
set()
l = [1, 2, 3, 3, 2, 1]
s = set(l)
print(s)
####
{1, 2, 3}
定义空集合,使用s = set()
。
集合的操作
- 判断元素
使用in'、
not in`进行判断。
s = {1, 3, 5, 7, 9}
print(3 in s)
print(4 not in s)
####
True
True
- 增加元素
a. 使用add()
方法增加一个元素
s = {1, 3, 5, 7, 9}
s.add('hello')
print(s)
####
{1, 3, 5, 7, 9, 'hello'}
b. 使用update()
方法增加多个元素
s = {1, 3, 5, 7, 9}
s.update([1, 2, 3, 4, 5, 6, 7, 8])
print(s)
####
{1, 2, 3, 4, 5, 6, 7, 8, 9}
- 删除元素
a. 调用remove()
方法一次删除一个指定元素,若不存在则抛出异常。
s = {1, 3, 5, 7, 9}
s.remove(2)
print(s)
s.remove(1)
print(s)
####
Traceback (most recent call last):
KeyError: 2
{3, 5, 7, 9}
b. 调用discard()
方法一次删除一个指定元素,弱不存在不抛出异常。
s = {1, 3, 5, 7, 9}
s.discard(1)
print(s)
s.discard(2)
print(s)
####
{3, 5, 7, 9}
{3, 5, 7, 9}
c. 调用pop()
方法,删除一个任意元素。
s = {1, 3, 5, 7, 9}
s.pop()
print(s)
s.pop()
print(s)
####
{3, 5, 7, 9}
{5, 7, 9}
d. 调用clear()
方法,清空集合。
s = {1, 3, 5, 7, 9}
print(s)
s.clear()
print(s)
####
{1, 3, 5, 7, 9}
set()
可以看到空集合并不用{}
来表示,而是使用set()
来表示。
集合间的关系
- 判断集合相等
使用==
、!=
来判断。
s1 = {1, 3, 5}
s2 = {1, 3, 5}
s3 = {2, 3, 4}
print(s1 == s2)
print(s1 != s3)
####
True
True
- 判断集合间的子集关系
调用issubset()
方法,,这图B是A的子集。
s1 = {1, 2, 3, 4, 5}
s2 = {1, 3, 5}
print(s1.issubset(s2)) # s1不是s2的子集
print(s2.issubset(s1)) # s2是s1的子集
####
False
True
- 判断集合间的超集关系
调用issuperset()
方法来判断,还是上图,A是B的超集。
s1 = {1, 2, 3, 4, 5}
s2 = {1, 3, 5}
print(s1.issuperset(s2)) # s1是s2的超集
print(s2.issuperset(s1)) # s2不是s1的超集
####
True
False
- 判断集合间的相交关系
调用isdisjoint()
方法来判断,
有交集,返回False
;没有交集返回True
s1 = {1, 2, 3, 4, 5}
s2 = {1, 2, 3}
s3 = {6, 7, 8}
print(s1.isdisjoint(s2)) # s1与s2有交集
print(s1.isdisjoint(s3)) # s1与s3没有交集
####
False
True
集合的数据操作
不影响原集合
- 交集
使用intersection()
方法,或者使用&
,如s1 & s2
就是\(s1∩s2\)
s1 = {1, 3, 5, 7, 8}
s2 = {3, 4, 5}
print(s1.intersection(s2))
####
{3, 5}
- 并集
使用union
方法,或者使用|
,如s1 | s2
就是\(s1∪s2\)
s1 = {1, 3, 5, 7, 8}
s2 = {3, 4, 5}
print(s1.union(s2))
####
{1, 3, 4, 5, 7, 8}
- 差集
使用difference()
方法,或者使用-
,如s1 - s2
集合\(A,B\),\(A - B\)
s1 = {1, 3, 5, 7, 8}
s2 = {3, 4, 5}
print(s1.difference(s2)) # s1 - s2 {1,7,8}
print(s2.difference(s1)) # s2 - s1 {4}
####
{8, 1, 7}
{4}
- 对称差集
使用symmetric_difference
方法,或者使用^
,如s1 ^ s2
集合\(A,B\),\(A∪B - A∩B\)
s1 = {1, 3, 5, 7, 8}
s2 = {3, 4, 5}
print(s1.symmetric_difference(s2))
####
{1, 4, 7, 8}
集合生成式
跟列表生成式一样,把[]
改成{}
即可。
s = {i * i for i in range(1, 5)}
print(s)
####
{16, 1, 4, 9}