今天介绍基础教程里最后一个数据结构set,也叫集合。

1、概念理解和基础用法

对于集合这个概念,你应该不会陌生,毕竟这玩意高中的数学课上就讲过,如果你都还给老师了,我可以帮你回忆一下。对于集合,我们只需要掌握一点即可,集合里没有重复的元素。

就算你向集合中刻意的添加许多相同的元素,最终,集合里对同一个元素也只保留一个,而不是多个,放多少存多少个的那是list。

1.1 创建一个空集合

myset = set()

1.2 将一个list转成集合

#coding=utf-8

myset = set([1,3,4,5,6,1,3,4])

for item in myset:

print item

1.3 添加新元素

myset.add(4)

1.4 删除一个元素

myset.remove(4)

如果被删除的元素不存在,会引发错误

1.5 判断元素是否在集合中

if 3 in myset:

print 'exist'

2、实际应用

上面的操作都是极为简单的,使用集合,通常是利用set中元素不能重复的特点来进行排重,比如我从一份文件中读取了许多水果的名字,这些名字都存储在了一个list中,内容如下:

fruit_lst = ['apple','orange','banana','pear','apple',

'orange','orange','pear']

现在,让你统计一共有多少种水果,分别是什么,你就可以用set来做

2.1 示例代码:

#coding=utf-8

fruit_set = set()

fruit_lst = ['apple','orange','banana','pear','apple','orange','orange','pear']

for item in fruit_lst:

fruit_set.add(item)

print u'一共有{count}类水果'.format(count=len(fruit_set))

for item in fruit_set:

print item

通过这个简单的例子,你会发现,len函数也可以作用于集合,不仅如此,还有max和min函数,此外,你还学习到了如何遍历集合。

如果足够细心,你会发现,如果仅仅是为了排重,字典也是可以胜任的,因为字典里的key也没有重复的,没错,这种想法是可行的,还是上面的例子,可以改成字典来做

2.2示例代码:

#coding=utf-8

fruit_dict = {}

fruit_lst = ['apple','orange','banana','pear','apple',

'orange','orange','pear']

for item in fruit_lst:

fruit_dict[item] = 1

print u'一共有{count}类水果'.format(count=len(fruit_dict))

for item in fruit_dict.keys():

print item

字典的keys()方法,此前我没有讲过,今天直接拿出来使用,只看名字你应该已经猜出他的作用了,这个方法返回一个list,里面是字典的所有的key。

学习要能举一反三,大胆去猜测然后小心的求证,看到keys()方法,你应该想到或许还有一个叫values()的方法,去验证一下吧。

2.3 根据问题来选择用谁

实际工作中,遇到这类问题,通常我不会用字典来解决,因为完全没有必要,仅仅是统计水果的种类而已,何必要多出一个value呢?

但如果题目稍作变化,改为统计水果的种类并且计算出每种水果出现的次数就不一样了,这时,value就有了存在的必要,我以水果种类做key,以出现次数做value,这样,既能统计出水果的种类,也可以统计出各种水果出现的次数。

#coding=utf-8

fruit_dict = {}

fruit_lst = ['apple','orange','banana','pear','apple',

'orange','orange','pear']

for item in fruit_lst:

if not item in fruit_dict:

fruit_dict[item] = 0

fruit_dict[item] += 1

print u'一共有{count}类水果'.format(count=len(fruit_dict))

for k,v in fruit_dict.items():

print k,v

3、集合间的操作

还有三个非常重要的方法,作用于两个集合之间

3.1 合并两个set

set1 = set([1,2,3])

set2 = set([2,3,4])

print set1.union(set2)

3.2 求交集

set1 = set([1,2,3])

set2 = set([2,3,4])

print set1.intersection(set2)

3.3 求差集

set1 = set([1,2,3])

set2 = set([2,3,4])

print set1.difference(set2)

如你所见,我所讲的内容并没有超出你的能力范围,事实上,如果你对知识锱铢必较,每一个知识点都理解清楚掌握扎实,越往后,学起来越轻松,渐渐的,你开始习惯编程的思维,稍加刻意练习,就可以融会贯通了。

python基础代码事例-菜鸟世界 -python基础---set相关推荐

  1. python基础代码事例-数据科学Python基础(附示例代码和练习题目)

    翻译 | AI科技大本营 参与 | 王珂凝 审校 | reason_W [AI科技大本营导读]Python的强大和灵活相信已经毋庸置疑了.那么数据科学中,我们又需要掌握哪些基础知识点才能满足使用需求呢 ...

  2. python 调试代码_菜鸟世界 -借助ipython 调试代码

    1.IPython IPython是一个python的交互式shell,比python默认的shell要好用的多,今天我们就来学习一下如何借用IPython来调试代码 2. 一段有错误的代码 # co ...

  3. python基础代码事例-Python基础总结成千行代码,让Python入门更简单!

    只要学会这千行代码,不管你是零基础还是弱基础或是没有接触过编程,都可以快速入门Python! 不管学习任何东西,入门方面都是比较快的,但是要深入的话,还是需要一个积累的过程,这是一个漫长且需要坚持的事 ...

  4. python基础代码事例-python基础代码大全

    [实例简介] python代码大全,适用于基础python学习者,里面的代码基本上是基础学习者必经过程. Python学习入门很快,但学习之路任重道远 [实例截图] [核心代码] python代码大全 ...

  5. python基础代码技巧_5行Python代码实现批量打水印技巧,值得收藏|python基础教程|python入门|python教程...

    在线工具需要上传到对方服务器,信息不安全. 很多工具不具备批量处理功能. 很多工具自定义的功能太少,如水印透明度,字体等. 操作繁琐. 现在只要你会使用命令,我们就能教大家怎么使用 Python 超级 ...

  6. python语言入门教程-菜鸟学Python入门教程大盘点|7个多月的心血总结

    原标题:菜鸟学Python入门教程大盘点|7个多月的心血总结 阅读本文大概需要5分钟 菜鸟学python已经写了70几篇,入门的教程已经快写完了,我把入门的文章整理了一下,下面是入门篇的一些总结,也是 ...

  7. python手机代码编辑器_10 个 Python IDE 和代码编辑器

    2020 版10 个最佳 Python IDE 和代码编辑器 简单的语法和更快的执行速度使Python成为程序员中的首选语言. 它广泛用于创建网站,主要用于大数据操作. 为了简化运行Python程序的 ...

  8. python简单代码画曲线图教程-python画曲线

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 桃心形曲线的方程如下 matlab绘制效果如下:? matlab程序如下. clc ...

  9. python语言代码片段-有用的Python代码片段

    我列出的这些有用的Python代码片段,为我节省了大量的时间,并且我希望他们也能为你节省一些时间.大多数的这些片段出自寻找解决方案,查找博客和StackOverflow解决类似问题的答案.下面所有的代 ...

最新文章

  1. 30岁之前必须明白的道理(你现在知道此生无憾了)
  2. Android中文API(97)—— ContextMenu
  3. 双11实时物流订单实践
  4. html中链接不自动变色,HTML 点击 标签 链接 点击之后变色-转发【已解决】
  5. Oracle中随机抽取N条记录,使用Oracle分析函数随机抽取N条记录
  6. mysql在恢复数据时出现“table full”报错
  7. lunux安装多个mysql_实例详解linux下多个mysql5.7.19(tar.gz)安装图文教程
  8. Effective_STL 学习笔记(九) 在删除选项中仔细选择
  9. 一起学java【5】---原生态数据类型使用陷阱
  10. 车站订票系统可行性分析报告
  11. THREE.js开荒小记(二):无效宽度linewidth的Line 和 无效阔threshold的Line2
  12. 台式计算机没有声音图标,win7电脑没有声音扬声器图标不见了怎么办?
  13. 互联网产品的运营指标
  14. 安装应用提示安装失败或不能安装,报INSTALL_FAILED_DUPLICATE_PERMISSION错误
  15. Jenkins 与 Gitlab 之间非交互拉取代码并进行代码部署
  16. 遍历hashMap、hashSet、Hashtable
  17. 浅谈黑盒测试和白盒测试
  18. 攻防世界MISC———Dift
  19. rx 5700xt相当于什么n卡 rx5700xt评测
  20. CDA数据分析师深圳校区就业班第17期正式开班!

热门文章

  1. 如何完美隐藏Disposable的存储和销毁过程(一)
  2. 神经网络的结构汇总——tflearn
  3. [bzoj2839]集合计数 题解 (组合数+容斥)
  4. 洛谷P3183食物链题解
  5. GC详解及Minor GC和Full GC触发条件总结
  6. 【呆子化雨】浅谈Discuz插件开发-邮件验证提醒插件
  7. Entity Framework 4.1 DbContext使用记之二——如何玩转本地实体? DbSet.Local属性的使用与实现...
  8. 锁的用处及脏读、不可重复读和幻觉读的概念
  9. Servlet—08—ServletContext; Servlet Config;
  10. Iterator 和 ListIterator 有什么区别?