集合

集合

集合可以包含多个元素,用逗号隔开,同dict字典一样,也是一组key的集合,但是不储存value,

而且key不能重复.

集合的元素遵循三个原则:

        1.每个元素必须是不可变类型的

    2.没有重复的元素

    3.无序

补充: 可变类型是不可哈希的类型,不可变类型是可哈希的类型

注意:集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结集合中单个值.

要创建一个set,需要提供一个list作为输入集合

s = set([1,2,3,4,4,5])
s = {1,2,3,4,5}

注意:重复元素在set中自动被过滤了,在后边还会单独介绍去重的方法,和set()去重的原理

add()

通过add()方法可以把元素添加到set中,可以重复添加,但是不会有效果.

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

remove()

集合通过remove()方法,移除集合中的元素.

>>> s.remove(4)
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

集合的其他操作

交集。(&  或者 intersection)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)  # {4, 5}
print(set1.intersection(set2))  # {4, 5}
 
并集。(| 或者 union
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}
 
print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7}
 
差集。(- 或者 difference)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}
 
反交集。 (^ 或者 symmetric_difference)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}
 
子集与超集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
 
print(set1 < set2)
print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。
 
print(set2 > set1)
print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。
 
frozenset不可变集合,让集合变成不可变类型
s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) 

深浅copy

浅copy()

第一层在内层中是独立的,第二次开始记更深的层次开始可以更改

li = [1,2,3]
l2 = li.copy()
li.append(666)
print(l2)

深copy

两个是完全独立的,互不影响.

面试题

# l1 = [1,2,3,[22,33]]
# l2 = l1[:]
# l1.append(66)
# # l1[-1].append(66)
# print(l2)
# import copy
# l1 =[1,2,3,[22,]]
# l2 = copy.deepcopy(l1)
# # print(l1,l2)
# l1[-1].append('TOM')
# print(l2)
# set1 = set({1,2,'baarry'})
# set2 = {1,2,'barry'}
# print(set1,set2)
# set1 = {'A','B','C','D','barry'}
# set1.update('A')
# print(set1)
# set1.update('老师')
# print(set1)
# set1.update([1,2,3])
# print(set1)

你可能感兴趣的:(集合)