集合set的定义
集和是不重复的数据结构;
定义集合的第一种方式:
s = {1,2,3,4,5}
print type(s)
print s
<type 'set'>
set([1, 2, 3, 4, 5])
集和的第二种方式,定义一个空的集和
s = set("hello")
print s
set(['h', 'e', 'l', 'o'])
列表去重
In [1]: li = [1,2,4,5,1,2]
In [2]: s=set(li)
In [3]: print s
set([1, 2, 4, 5])
In [4]: li = list(s)
In [5]: print li
[1, 2, 4, 5]
集合的特性:
集合是无序的, 不重复的数据类型;
因此不支持索引,也不支持切片;也不支持重复;也不支持连接;
支持成员操作符;
支持for循环;
In [6]: s = {3,2,4,6,5,7,6}
In [8]: for i in s:
...: print i
...:
2
3
4
5
6
7
集合的增删改查
增:add曾个体 update增集合
In [9]: print s
set([2, 3, 4, 5, 6, 7])
In [10]: s.add(2)
In [11]: print s
set([2, 3, 4, 5, 6, 7])
In [12]: s.add(9)
In [13]: print s
set([2, 3, 4, 5, 6, 7, 9])
In [22]: s1 = {12312,12321,3444,3555}
In [23]: s.update(s1)
In [24]: print s
set([12321, 2, 3, 4, 5, 6, 7, 9, 3555, 3444, 12312])
查-(关系测试操作)
In [25]: print s
set([12321, 2, 3, 4, 5, 6, 7, 9, 3555, 3444, 12312])
In [26]: print s1
set([12312, 12321, 3555, 3444])
交集
In [27]: s1&s
Out[27]: {3444, 3555, 12312, 12321}
并集
In [28]: s1|s
Out[28]: {2, 3, 4, 5, 6, 7, 9, 3444, 3555, 12312, 12321}
差集
In [29]: s-s1
Out[29]: {2, 3, 4, 5, 6, 7, 9}
In [30]: s1-s
Out[30]: set()
删 pop() 随机
In [31]: print s.pop()
12321
In [32]: print s
set([2, 3, 4, 5, 6, 7, 9, 3555, 3444, 12312])
删 remove(2) 指定字符,如果没有则报错
In [32]: print s
set([2, 3, 4, 5, 6, 7, 9, 3555, 3444, 12312])
In [33]: print s.remove(2)
None
In [34]: print s.remove(2)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-34-3912039b17ad> in <module>()
----> 1 print s.remove(2)
KeyError: 2
删 clear()清空集合元素
应用:
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性, 他先用计算机生成了N个1到1000
之间的随机整数(N≤1000), N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数去
掉,不同的数对应 着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺 序去找同学做调
查。请你协助明明完成“去重”与“排序”的工作;
import random
s = set()
N = input('输入一个数')
for i in range (N) :
s.add(random.randint(1,1000))
# sorted 是内置方法, 用来排序;
print sorted(s)
# li = list(s)
# li.sort()
# print li
总结
可变数据类型: 列表, 字典, 集合
不可变数据类型: 数值类型, 字符串, 元组
- 可变数据类型实现某个功能, 直接改变可变的数据类型;
- 不可变数据类型实现某个功能,需要将结果赋值给另外一个变量;