python基础-集合

集合

1.创建集合

 

 

2.集合可存储的类型

 

 

 

 

3.set的增加

>>> s=set("abc")

>>> s.add("111")

>>> s

set(['a', 'c', 'b', '111'])

>>> s.update("qqq")

>>> s

set(['a', 'q', 'c', 'b', '111'])    #存进去3个q,会自动去重。

 

4.集合的删除

>>> s.remove("a")

>>> s

set(['q', 'c', 'b', '111'])

>>> s.remove("z")

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

KeyError: 'z'    #删除不存在的元素时,会抛出异常

 

小练习:捕获删除不存在元素时抛出的异常

#coding = utf-8

s=set('hello')

print u"删除前的集合:",s

 

try:

    s.remove('h')

 

except KeyError,e:

    print u"集合中不存在该元素"

except:

    print

else:

    print u"删除成功"

小练习:把set中的111替换成xyz->思路:先删除再添加

>>> s

set(['q', 'c', 'b', '111'])

>>> s.remove('111')

>>> s

set(['q', 'c', 'b'])

>>> s.add('xyz')

>>> s

set(['c', 'b', 'xyz', 'q'])

 

利用discard删除集合中的元素,不存在时也不会报异常

>>> s

set(['c', 'b', 'xyz', 'q'])

>>> s.discard("c")

>>> s

set(['b', 'xyz', 'q'])

>>> s

set(['b', 'xyz', 'q'])

 

5.遍历集合

  >>> s

set(['c', 'b', 'xyz', 'q'])

>>> for i in s:

...     print i

...

c

b

xyz

q

>>>

>>> s

set(['c', 'b', 'xyz', 'q'])

>>> for index,i in enumerate(s):

...     print index,i

...

0 c

1 b

2 xyz

3 q

 

 

6.将集合转换为list,tuple,str

>>> s

set(['c', 'b', 'xyz', 'q'])

>>> list(s)

['c', 'b', 'xyz', 'q']

强制类型转换

 

也可以遍历set存到list里面去

 

 #set转换成tuple

>>> tuple(set(s))

('q', 'c', 'b', 'xyz')

#set转换成str

>>> str(set(s))

"set(['q', 'c', 'b', 'xyz'])" #直接强转是不行的

>>> s

set(['c', 'b', 'xyz', 'q']) #用join可以

>>> "".join(s)

'cbxyzq'

#set不能转成字典

>>> dict(set(s))

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: dictionary update sequence element #0 has length 1; 2 is requ

拓展:生成字典的一个方法

>>> zip(['one','two','three'],['1','2','3'])

[('one', '1'), ('two', '2'), ('three', '3')]

 

7.pop函数

>>> s

set(['a', 'm', '111', 'v', 'z'])

>>> s

set(['a', 'm', '111', 'v', 'z'])

>>> s

set(['a', 'm', '111', 'v', 'z'])

>>> s.pop()

'a'

>>> s

set(['m', '111', 'v', 'z'])

>>> s.pop()

'm'

>>> s

set(['111', 'v', 'z'])

弹出第一个元素并删除

 

小练习:删除set中的最后一个元素

>>> s

set(['111', 'v', 'z'])

>>> j=0

>>> for i in s:

...     if j==len(s)-1:

...         value=i

...     j+=1

...

>>> value

'z'

>>> s.remove(value)

>>> s

set(['111', 'v'])

 

同学写的封装起来的:

def pop_index(s,num):
    '''
        1.删除集合中特定位置的值
        2.位置从1开始
    '''
    if num==0:
        return '位置需要从1开始'
    elif num>len(s):
        return '长度不足,删除错误'
    else:
        for index,x in enumerate(s):
            if num==index+1:
                value=x 
        s.remove(value)
        return s

ss=set(['c', 'b', 'e', 'q', 'w', 'hg'])
print pop_index(ss, 9)

 

拓展:面试题,关键字驱动

动作  要操作的对象  操作的值  -> 内部函数的执行

8. 集合的clear,copylen函数

  >>> s

set(['sss', 'aat', 's', '111', 'v'])

>>> s.clear()

>>> s

set([])

>>> s.update('a','b','c','g')

>>> s2=s.copy()

>>> s2

set(['a', 'c', 'b', 'g'])

>>> id(s)

40871976L

>>> id(s2)

40872424L

>>> len(s)

4

>>> len(s2)

4

 

9.集合的交集、并集、和差集

>>> s2.add('e')

>>> s2.update('5','6')

>>> s2

set(['a', 'c', 'b', 'e', 'g', '5', '6'])

>>> s

set(['a', 'c', 'b', 'g'])

>>> set(s)&set(s2)

set(['a', 'c', 'b', 'g'])

>>> s|s2

set(['a', 'c', 'b', 'e', 'g', '5', '6'])

>>> s&s2

set(['a', 'c', 'b', 'g'])

>>> s-s2

set([])

>>> s2-s

set(['5', 'e', '6'])

差集是有方向的,比较的是第一个集合比第二个集合中多的元素

 

也可以用单词直接

>>> s.intersection(d)
set(['c', 'd'])
>>> s.union(d)
set(['a', 'c', 'b', 'e', 'd', 'f'])

>>> s.difference(d)
set(['a', 'b'])

 

 

10.运算符比较集合间的关系

 本质:计算的是两个集合是否为包含或被包含的关系

 >>> s==s2

False

>>> s>s2

False

>>> s<s2

True

>>> s>=s2

False

>>> s<=s2

True

>>> s

set(['a', 'c', 'b', 'g'])

>>> s2

set(['a', 'c', 'b', 'e', 'g', '5', '6'])

>>> s!=s2

True

 

>>> s2.issuperset(s)   超集   s2完全包含s
True

>>> s.issubset(s2)    子集   s完全包含s2

True

 

11.不可变集合

>>> s3=frozenset('python')

>>> s3

frozenset(['h', 'o', 'n', 'p', 't', 'y'])

>>> type(frozenset)

<type 'type'>

>>> type(s3)

<type 'frozenset'>

>>> s3.add('a')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'frozenset' object has no attribute 'add' #不可变操作时会报错

 

posted @ 2018-03-21 22:47  小七Libra  阅读(138)  评论(0编辑  收藏  举报