0%

Python中set类型

set像list一样,有一系列元素,但是set的元素没有重复,而且是无序的,这和dict的key很像。

set的特点

set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的
set存储的元素也是没有顺序的

1
2
3
4
5
6
weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])
x = input() # 用户输入的字符串
if x in weekdays:
print 'input ok'
else:
print 'input error'
set的处理方法

创建set

可以直接通过{}创建set,亦可以调用set()函数(可以理解为强制类型转换)创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set1 = {'123','1','2'}
print(set1) # {'123','1','2'}

# 传入一个list,list的元素将作为set的元素:
s = set(['A', 'B', 'C'])
print(s) # {'A', 'C', 'B'}

s = set('12345')
print(s) # {'1','2','3','4','5'}

# 传入包含重复元素的list,set会自动去掉重复元素
# 如下,原来的list有4个元素,但set只有3个元素
s = set(['A', 'B', 'C', 'C'])
print(s) # {'A', 'C', 'B'}
len(s) # 3
访问set

访问set中的某个元素实际上就是判断一个元素是否在set中。由于set也是一个集合,所以,遍历set和遍历list类似,都可以通过for循环实现。

1
2
3
4
5
6
s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
print('bart' in s) # False

s = set(['Adam', 'Lisa', 'Bart'])
for name in s:
print(name)
更新set

由于set存储的是一组不重复的无序元素,因此,更新set操作主要是添加新元素到set中和删除set已有元素两种。
添加元素时,用set的add()方法。如果添加的元素已经存在,add()不会报错,但是不再添加:

1
2
3
4
5
6
7
s = set([1, 2, 3])
s.add(4)
print(s) # {1, 2, 3, 4}

s = set([1, 2, 3])
s.add(3)
print(s) # {1, 2, 3}

删除元素时,用set的remove()方法。如果删除的元素不存在set中,remove()会报错:

1
2
3
4
5
6
7
8
9
s = set([1, 2, 3, 4])
s.remove(4)
print(s) # {1, 2, 3}

s = set([1, 2, 3])
s.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4

所以用add()可以直接添加,而使用remove()前需要判断

set操作符

另有<=,<,>=,>两组关系操作符判断集合的包含关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
A = {'p', 'y', '123'}
B = set('pypy123') #B = {'p', 'y', '1', '2', '3'}

A |= B
print(A) # {'p','y','123','1','2','3'}

A -= B
print(A) # {'123'}

A &= B
print(A) # {'p','y'}

A ^= B
print(A) # {'123','1','2','3'}
set应用

1.关系比较(判断包含关系)
2.数据去重

1
2
3
4
l = [1, 2, 3, 4, 3, 4, 2, 5]
s = set(l)
l = list(s)
print(l)
天生我材必有用,千金散尽还复来~
  • 本文作者: XTLei
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
-------------本文结束感谢您的阅读-------------