1. set

dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。

有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。

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

创建 set 的方式是调用set()并传入一个listlist的元素将作为set的元素

s = set(['A', 'B', 'C'])

可以查看 set 的内容:

>>> print s
set(['A', 'C', 'B'])

请注意,上述打印的形式类似 list, 但它不是 list,仔细看还可以发现,打印的顺序和原始 list 的顺序有可能是不同的,因为set内部存储的元素是无序的。

因为set不能包含重复的元素,所以,当我们传入包含重复元素的 list 会怎么样呢?

>>> s = set(['A', 'B', 'C', 'C'])
>>> print s
set(['A', 'C', 'B'])
>>> len(s)
3

结果显示,set会自动去掉重复的元素,原来的list有4个元素,但set只有3个元素。

2. 访问set

由于set存储的是无序集合,所以我们没法通过索引来访问。

访问 set中的某个元素实际上就是判断一个元素是否在set中。

例如,存储了班里同学名字的set:

s = set(['Adam', 'Lisa', 'Bart', 'Paul'])

我们可以用 in 操作符判断:

Bart是该班的同学吗?

>>> 'Bart' in s
True

Bill是该班的同学吗?

>>> 'Bill' in s
False

bart是该班的同学吗?

>>> 'bart' in s
False

看来大小写很重要,’Bart’ 和 ‘bart’被认为是两个不同的元素。

3. set的特点

set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。

set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。

最后,set存储的元素也是没有顺序的。

set的这些特点,可以应用在哪些地方呢?

星期一到星期日可以用字符串’MON’, ‘TUE’, … ‘SUN’表示。

假设我们让用户输入星期一至星期日的某天,如何判断用户的输入是否是一个有效的星期呢?

可以用 if 语句判断,但这样做非常繁琐:

x = '???' # 用户输入的字符串
if x!= 'MON' and x!= 'TUE' and x!= 'WED' ... and x!= 'SUN':print 'input error'
else:print 'input ok'

注意:if 语句中的…表示没有列出的其它星期名称,测试时,请输入完整。

如果事先创建好一个set,包含’MON’ ~ ‘SUN’:

weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'])

再判断输入是否有效,只需要判断该字符串是否在set中:

x = '???' # 用户输入的字符串
if x in weekdays:print 'input ok'
else:print 'input error'

这样一来,代码就简单多了

3.遍历set

由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现。

直接使用 for 循环可以遍历 set 的元素:

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

注意: 观察 for 循环在遍历set时,元素的顺序和list的顺序很可能是不同的,而且不同的机器上运行的结果也可能不同。

4. 更新list

由于set存储的是一组不重复无序元素,因此,更新set主要做两件事:

一是把新的元素添加到set中,二是把已有元素从set中删除

添加元素时,用set的add()方法:

>>> s = set([1, 2, 3])
>>> s.add(4)
>>> print s
set([1, 2, 3, 4])

如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:

>>> s = set([1, 2, 3])
>>> s.add(3)
>>> print s
set([1, 2, 3])

删除set中的元素时,用set的remove()方法:

>>> s = set([1, 2, 3, 4])
>>> s.remove(4)
>>> print s
set([1, 2, 3])

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

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

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

【廖雪峰python入门笔记】set相关推荐

  1. 【廖雪峰python入门笔记】列表生成式

    1. 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, ...

  2. 【廖雪峰python入门笔记】迭代

    1. 迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration). 在Python中,迭代是通过for ...

  3. 【廖雪峰python入门笔记】切片

    1. 对list进行切片 对list进行切片 取一个list的部分元素是非常常见的操作.比如,一个list如下: L = ['Adam', 'Lisa', 'Bart', 'Paul'] 取前3个元素 ...

  4. 【廖雪峰python入门笔记】函数

    1. 函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...

  5. 【廖雪峰python入门笔记】dict

    1. dict 我们已经知道,list和tuple 可以用来表示顺序集合,例如,班里同学的名字: ['Adam', 'Lisa', 'Bart'] 或者考试的成绩列表: [95, 85, 59] 但是 ...

  6. 【廖雪峰python入门笔记】for循环

    list或tuple可以表示一个有序集合.如果我们想依次访问一个list中的每一个元素呢?比如 list: L = ['Adam', 'Lisa', 'Bart'] print(L[0]) print ...

  7. 【廖雪峰python入门笔记】if语句

    1. if语句及缩进规则 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = 20 if ...

  8. 【廖雪峰python入门笔记】tuple_创建单元素

    tuple和list一样,可以包含 0 个.1个和任意多个元素. 包含多个元素的 tuple,前面我们已经创建过了. 包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示: t = ( ...

  9. 【廖雪峰python入门笔记】list_按照索引访问

    1. 按照索引访问list Python按照索引访问list 由于list是一个有序集合,所以,我们可以用一个list按分数从高到低表示出班里的3个同学: L = ['Adam', 'Lisa', ' ...

  10. 【廖雪峰python入门笔记】list_创建

    1. list 列表:list 1. 是Python内置的一种数据类型 2. 是一种有序的集合 3. 可以随时添加和删除其中的元素 比如,列出班里所有同学的名字,就可以用一个list表示: ['Mic ...

最新文章

  1. 重磅!苹果祭出大招:史上最强 Mac 发布,iPad OS 惊艳问世
  2. 13、Excutors 结合 ThreadFactory 自动给线程加上线程名
  3. 爬取及分析天猫商城冈本评论(二)数据处理
  4. poj 1338 Ugly Numbers(丑数模拟)
  5. 第三次学JAVA再学不好就吃翔(part12)--基础语法之for循环语句
  6. mac安装brew简单方法
  7. 要比惨吗?看看这个女人
  8. HTML5-画布(canvas)效果之-渐变色
  9. java 关键字 sizeof_Java 基本数据类型 sizeof 功能
  10. 数学建模学习笔记(十)——时间序列模型
  11. SQL Server游标+延迟执行简介
  12. 使用 profile 进行python代码性能分析
  13. 计算机爱好者协会义务维修的目的,计算机协会义务维修活动总结范文
  14. metal分析是什么意思_GWAS数据如何做meta分析?
  15. 某智能化小区网络规划及设计
  16. OpenGL 编程指南笔记——第8章 OpenGL 绘制像素、位图、字体和图像
  17. 微信小程序图片根据屏幕比例缩放
  18. CloudSim Plus任务调度策略对比
  19. maven 服务器自动打包,Maven 打包项目到私服 (deploy)的配置方法
  20. [附源码]java毕业设计超市订单管理系统

热门文章

  1. 由于客户端检测到一个协议错误 代码0x1104
  2. (转)iPhone开发经典语录集锦
  3. OTSU 二值化的实现
  4. 旷视张祥雨:高效轻量级深度模型的研究和实践 | AI ProCon 2019
  5. 机器学习萌新必备的三种优化算法 | 选型指南
  6. 机器学习大神迈克尔 · 乔丹:我讨厌将机器学习称为AI
  7. Scikit-Learn大变化:合并Pandas
  8. Yann LeCun力挺前AAAI主席,批判深度学习的Marcus遭怒怼
  9. 跨界 | 隐形AI与设计
  10. 我真不想学 happens - before 了!