day3集合

"""
set和list类似,拥有一系列元素,但是set和list不一样,set里面的元素是不允许重复的,而list里面可以包含相同的元素;
set与list的另一个区别是,set里面的元素是没有顺序的。打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的

创建set的方式是使用set(),并传入一个list,list的元素将会被转换成set的元素
"""
l1 = [1, 2, 3, 41, 1, 1]
print(l1)  # [1, 2, 3, 41, 1, 1]

s1 = set([1, 3, 2, 41, 1, 1])
print(s1)   # {1, 2, 3, 41},重复的元素都被去掉了,这是set的一个重要特点

s2 = set(s1)
print(s2)   # {1, 2, 3, 41}


"""
set的元素没有顺序,因此我们不能像list那样通过索引来访问。
访问set中的某个元素实际上就是判断一个元素是否在set中,这个时候我们可以使用in来判断某个元素是否在set中。
注意:set元素是区分大小写
"""
names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
s3 = set(names)
print('Bob' in s3)  # True
print('bob' in s3)  # False, set元素是区分大小写
print('Alice' not in s3)  # False


"""
set()中添加元素:
    1、add()方法:单个元素添加
    2、update()方法:批量元素添加
"""
names = ['Alice', 'Bob', 'Candy', 'David', 'Ellena']
set_names = set(names)
set_names.add('Gina')
print(set_names)    # {'Alice', 'Bob', 'Ellena', 'Candy', 'David', 'Gina'}

# 添加已存在的元素,再次添加'Gina'
set_names.add('Gina')
print(set_names)    # {'Ellena', 'David', 'Bob', 'Gina', 'Alice', 'Candy'},已存在的元素,值不修改也不报错

# set_names.add('Gina', 'Zoey')
# print(set_names)    # TypeError: add() takes exactly one argument (2 given)


new_names = ['Gina', 'Zoey']
set_names.update(new_names)
print(set_names)    # {'Zoey', 'Candy', 'Gina', 'Alice', 'David', 'Ellena', 'Bob'}

# 直接update多个可迭代对象时,和extend方法类似
set_names.update('Gina', 'Zoey')
print(set_names)
# {'Zoey', 'Candy', 'Gina', 'Alice', 'a', 'o', 'G', 'David', 'Ellena', 'e', 'y', 'i', 'Bob', 'Z', 'n'}

print('__________________________________')

"""
删除set元素:
    1、remove():删除的元素集合中不存在,会报错
    2、discard():删除的元素集合中不存在,不会报错,用这个更高效
    
清除集合:clear()
"""
set_names.remove('Zoey')
print(set_names)

# 再次删除上面已被删除的元素'Zoey'
# set_names.remove('Zoey')
# print(set_names)    # KeyError: 'Zoey'

set_names.discard('Zoey')
print(set_names)

"""
打印结果:
{'e', 'Z', 'David', 'Alice', 'n', 'Candy', 'o', 'a', 'y', 'Gina', 'G', 'Bob', 'i', 'Ellena'}
{'e', 'Z', 'David', 'Alice', 'n', 'Candy', 'o', 'a', 'y', 'Gina', 'G', 'Bob', 'i', 'Ellena'}
"""

set_names.clear()
print(set_names)    # set()


"""
练习:
针对以下set,给定一个list,对于list里面的每个元素,如果set中包含这个元素,就将其删除,否则添加到set里面去
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
S = set([1, 3, 5, 7, 9, 11])
"""
L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
S = set([1, 3, 5, 7, 9, 11])
for i in L:
    if i in S:
        S.remove(i)
    else:
        S.add(i)
print(S)    # {2, 4, 6, 8, 10, 11}


"""
集合的子集和超集:
    s1.issubset(s2):判断s1是否为s2的子集
    s2.issuperset(s1):判断s2是否为s1的超集
    isdisjoint():判断两个集合是否有重合。如果有重合,返回False,否则返回True。
"""
s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 判断s1是否为s2的子集
print(s1.issubset(s2))  # True
print(s2.issubset(s1))  # False
# 判断s2是否为s1的超集
print(s2.issuperset(s1))    # True

print(s1.isdisjoint(s2))    # False
s3 = set([1,3])
s4 = set([1,2,4])
print(s3.isdisjoint(s4))    # False,有相同的元素就算重合


"""
练习:
已知两个集合s1、s2,请判断两个集合是否有重合,如果有,请把重合的元素打印出来。
s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
"""
s1 = set([1, 2, 3, 4, 5])
s2 = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
flag = s1.isdisjoint(s2)
# 方法一:
if not flag:
    for i in s1:
        if i in s2:
            print(i)

# 方法二:
if not flag:
    for item in s1:
        if item not in s2:
            continue
        print(item)
        
"""
打印结果:
1
2
3
4
5
"""

 

posted @ 2023-03-04 23:45  雪儿来  阅读(8)  评论(0编辑  收藏  举报