Python_集合

集合

集合类型与数学中集合的集合概念一致,是多个元素的无序组合
集合元素唯一且不可更改,不能是可变数据类型
1、建立集合
建立集合类型用{}或set(),集合用大括号{}表示,元素间用逗号分隔。建立空集合,必须用set()
例1:

s = {1,2,3,4,5,6,7}
print(s)
s = set({1,2,3,4,5,6,7})
print(s)
s = set((1,2,3,4,5,6,7))
print(s)
   {1, 2, 3, 4, 5, 6, 7}
   {1, 2, 3, 4, 5, 6, 7}
   {1, 2, 3, 4, 5, 6, 7}

例2:

s = set()
print(type(s))   #type()函数检测数据的类型
print(s)
d = {}
print(type(d))
print(d)
  <class 'set'>
  set()
 <class 'dict'>
  {}        # 如果只是用大括号定义,则定义的是一个dict类型

2、集合操作符
S | T 返回一个新集合,包括有集合S和T中所有元素
例:

s = {1,2,5,6,'ab','b'}
t = {4,5,6,7,'a','b','c'}
f = s|t
print(f)
{1, 2, 4, 5, 6, 7, 'ab', 'c', 'b', 'a'}   #集合元素无序唯一且不可更改

S - T 返回一个新集合,包括在集合S但不在T中的元素
例:

s = {1,2,5,6,'ab','b'}
t = {4,5,6,7,'a','b','c'}
f = s - t
print(f)
{'ab', 1, 2}     #集合元素无序唯一且不可更改

-S & T 返回一个新集合,包括同时在集合S和T中的元素
例:

s = {1,2,5,6,'ab','b'}
t = {4,5,6,7,'a','b','c'}
f = s &t
print(f)
{'b', 5, 6}

S ^ T 返回一个新集合,包括集合S和T中的非相同元素
例:

s = {1,2,5,6,'ab','b'}
t = {4,5,6,7,'a','b','c'}
f = s ^t
print(f)
{1, 2, 4, 'ab', 7, 'a', 'c'}

S <= T或S < T 返回True/False,判断S和T的子集关系
例:

s = {1,2,5,6,'ab','b'}
t = {4,5,6,7,'a','b','c'}
g = {1,2,'b'}
print(s <= t)
print(s < g)
False
False

S >= T或S > T 返回True/False,判断S和T的子集关系
例:

s = {1,2,5,6,'ab','b'}
t = {4,5,6,7,'a','b','c'}
g = {1,2,'b'}
print(s >= t)
print(s > g)
False
True

3.集合处理方法
S.copy() 返回集合S的一个副本
例:

b = {1,3,4,'ab','e'}.copy()
print(id({1,3,4,'ab','e'}))
print(b)
print(id(b))
1801439431816
{1, 3, 4, 'e', 'ab'}
1801439431368

len(S) 返回集合S的元素个数
例:

          print(len({1,3,4,'ab','e'}))
          #   5

x in S 判断x是否在集合S元素中,在则返回True,反之False
例:

           print('e' in {1,3,4,'ab','e'})
             #   Ture

set(x) 将其他类型变量x转化为集合类型。集合元素无序唯一且不可更改,则转化为集合类型后,会合并相同元素
例:

a = 'I am very fun !!!'
b = ['p','y',1,2,3]
c = (1,3,4,'ab','e')
d= {1:'one', 2:'two', 3:'three'}
print(set(a))
print(set(b))
print(set(c))
print(set(d)
{'n', 'y', 'm', 'v', 'r', 'f', 'a', 'I', 'e', ' ', 'u',’!’}     #字符串转化为集合,将其转化为单个字符(包括特殊字符空格等)
{1, 'p', 3, 2, 'y'}     #列表转化为集合,方括号[]变成大括号{}
{1, 3, 4, 'ab', 'e'}    #元组转化为集合,圆括号()变成大括号{}
{1, 2, 3}      #字典转化集合,只将键用来组成集合

S.add(x) 如果x不在集合S中,将x增加到S。无返回值,只操作
例:

b = {1,3,4,'ab'}
print(b.add('e'))
print(b)
None
{1, 3, 4, 'ab', 'e'}

S.update( x ) 添加元素,且参数可以是字符串,列表,元组,字典等
例:

th = set({"Google", "Runoob", "Taobao"})
th.update('I am')
print(th)
th.update([1,4],[5,6]) 
print(th)
th.update({1:'one',3:'three'})
print(th)
{'m', 'Google', 'I', 'a', ' ', 'Runoob', 'Taobao'}
{1, 4, 5, 6, 'm', 'Google', 'I', 'a', ' ', 'Runoob', 'Taobao'}
{1, 3, 4, 5, 6, 'm', 'Google', 'I', 'a', ' ', 'Runoob', 'Taobao'}

S.discard(x) 移除S中元素x,如果x不在集合中,不报错。
例:

b = {1,3,4,'ab','e'}
b.discard('e')
print(b)
{1, 3, 4, 'ab'}

S.remove(x) 移除S中元素x,如果x不在集合S中,产生KeyError异常
例:

b = {1,3,4,'ab'} 
b.remove('e') 
print(b)

---------------------------------------------------------------------------
KeyError         Traceback (most recent call last)
<ipython-input-31-0466812e702d> in <module>()
      1 b = {1,3,4,'ab'}
----> 2 b.remove('e')
      3 print(b)

KeyError: 'e'        #产生KeyError异常

S.pop 随机返回S的一个元素,更新S,且多次执行测试结果都不一样。若S为空产生KeyError异常
例:

b = {1,3,4,'ab','e'}
h = b.pop()
print(h)
  1

然而在交互模式,pop 是删除集合的第一个元素(排序后的集合的第一个元素)
例:

thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
print(thisset.pop())
print(thisset)
Google
{'Facebook', 'Runoob', 'Taobao'}

frozenset([iterable]) 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素,如果不提供任何参数,默认会生成空集合。iterable 可迭代的对象,比如字符串、列表、字典、元组等
例:

s = frozenset()
print(type(s))
print(s)
       a = frozenset(range(10))     # 生成一个新的不可变集合
print(a)
b = frozenset('runoob')    
print(type(b))
print(b)
<class 'frozenset'>
frozenset()
frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
<class 'frozenset'>
frozenset({'n', 'b', 'o', 'r', 'u'})

S.clear() 移除S中所有元素

4.集合内涵
数据去重
集合元素无序唯一且不可更改
以列表类型去重为例:

ls = ['p','p','y','y',123]
s = set(ls)
print(s)
lt = list(s)
print(lt)
{'p', 123, 'y'}
['p', 123, 'y']

普通集合内涵
集合在初始化后自动过滤掉重复元素
例:

s = {23,223,545,3,1,2,3,4,3,2,3,1,2,4,3}
print(s)
ss = {i for i in s}
print(ss)
{545, 1, 3, 2, 4, 23, 223}
{545, 2, 3, 4, 1, 23, 223}

带条件的集合内涵
例:

s = {23,223,545,3,1,2,3,4,3,2,3,1,2,4,3}
sss = {i for i in s if i % 2 == 0}     #求出能被2整除的数
print(sss)
   {2, 4}

多循环的集合内涵
例:

s1 = {1,2,3,4}
s2 = {'a','b'}
s = {m*n for m in s2 for n in s1}
print(s)
s = {m*n for m in s2 for n in s1 if n%2 ==0}
print(s)
{'aa', 'bb', 'aaaa', 'b', 'aaa', 'a', 'bbbb', 'bbb'}
{'aa', 'aaaa', 'bbbb', 'bb'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值