python学习笔记(六)之集合1
python中各种类型与其各种方法,都可以使用下面的方法查到:
(1)交互模式下用dir()或者help()
(2)google
集合
特点:英语set,有的可变,有的不可变;元素无次序,不可重复。
集合没有索引(可以使用dir(set)查看),也就没有顺序而言,它不属于序列。
集合中的元素是hashable(不可变)类型!

创建集合--字符串
实例1:

s1 = set("wtf")
s1
set(['t', 'w', 'f'])
type(s1)

把字符串的字符拆解开,形成集合。
实例2:
s2 = set("wttf")
s2
set(['t', 'w', 'f'])
type(s2)

说明:"wttf"中有两个"t",但在集合中,只有一个"t",这也说明了集合中的元素是不能重复。

创建集合--列表
实例3:

s3 = set([123,"wtf","book","wtf"])
s3
set([123, 'book', 'wtf'])
说明:创建集合的时候,如果发现列表中有重复的元素,就会过滤掉,剩下不重复的。

add

help(set.add)
add(...)
Add an element to a set.
This has no effect if the element is already present.
实例4:
a_set = {}
a_set.add("wtf")
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'dict' object has no attribute 'add'
type(a_set)

说明:{}这个东西,在字典和集合中都用。但是,如上面的方法建立的是字典,不是集合。这是python的规定。
用()也不行,如下:
实例5:
a_set = ()
a_set.add("wtf")
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'tuple' object has no attribute 'add'
type(a_set)

说明:计算机认为建立的是元组。

要建立空集合,不得不使用set()
实例6:

s = set()
type(s)

要建立非空集合,如下:
实例7:

a_set = {"a","i"}
type(a_set)

print a_set
set(['i', 'a'])
或者:
a_set = set(["a","i"])
type(a_set)

print a_set
set(['a', 'i'])

增加元素:
实例8:

a_set.add("wtf")
a_set
set(['i', 'a', 'wtf'])

update
特点:将另外一个集合中元素合并过来。

help(set.update)
update(...)
Update a set with the union of itself and others.
实例9:
s1
set(['t', 'w', 'f'])
s2 = set(["python","fei"])
s2
set(['python', 'fei'])
s1.update(s2)
s1
set(['python', 'fei', 't', 'w', 'f'])
s2
set(['python', 'fei'])

pop

help(set.pop)
pop(...)
Remove and return an arbitrary set element.
Raises KeyError if the set is empty.

实例10:

b_set = {"[1,2,3]","h","o","n","p","t","wtf","y"}
b_set.pop()
'[1,2,3]'
b_set.pop()
'wtf'
b_set.pop()
'h'
b_set
set(['o', 'n', 'p', 't', 'wtf', 'y'])
说明:从set中任意选一个删除,并返回该值。
set是不能指定删除某个元素的:
实例11:
b_set.pop("n")
Traceback (most recent call last):
File "", line 1, in
TypeError: pop() takes no arguments (1 given)

remove

help(set.remove)
remove(...)
Remove an element from a set; it must be a member.

If the element is not a member, raise a KeyError.

说明:set.remove(obj)中的obj必须是set中的元素,否则就报错,实验如下:
实例12:

b_set
set(['o', 'n', 'p', 't', 'wtf', 'y'])
b_set.remove("p")
b_set
set(['o', 'n', 't', 'wtf', 'y'])
b_set.remove("didi")
Traceback (most recent call last):
File "", line 1, in
KeyError: 'didi'
说明:明确告诉集合中没有“wtf”。

discard(obj)

help(set.discard)
discard(...)
Remove an element from a set if it is a member.

If the element is not a member, do nothing.

说明:discard与remove类似,但是又有所不同,实验如下:
实例13:

b_set
set(['o', 'n', 't', 'y'])
b_set.discard("n")
b_set
set(['o', 't', 'y'])
b_set.discard("wtf")
b_set
set(['o', 't', 'y'])
说明:discard(obj)中的obj,如果是集合中的元素,就删除;如果不是,就什么也不做,do nothing。
两者做个对比:
实例14:
b_set
set(['o', 't', 'y'])
b_set.discard("w")
b_set
set(['o', 't', 'y'])
b_set.remove("w")
Traceback (most recent call last):
File "", line 1, in
KeyError: 'w'

clear

help(set.clear)
clear(...)
Remove all elements from this set.
实例15:
b_set
set(['o', 't', 'y'])
b_set.clear()
b_set
set([])
bool(b_set)
False