当前位置: 首页 > news >正文

python学习笔记(六)之集合1

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

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

>> s1 = set("wtf")
>> s1
set(['t', 'w', 'f'])
>> type(s1)
<type 'set'>
把字符串的字符拆解开,形成集合。
实例2:
>> s2 = set("wttf")
>> s2
set(['t', 'w', 'f'])
>> type(s2)
<type 'set'>
说明:"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 "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'add'
>> type(a_set)
<type 'dict'>
说明:{}这个东西,在字典和集合中都用。但是,如上面的方法建立的是字典,不是集合。这是python的规定。
用()也不行,如下:
实例5:
>> a_set = ()
>> a_set.add("wtf")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'add'
>> type(a_set)
<type 'tuple'>
说明:计算机认为建立的是元组。

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

>> s = set()
>> type(s)
<type 'set'>

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

>> a_set = {"a","i"}
>> type(a_set)
<type 'set'>
>> print a_set
set(['i', 'a'])
或者:
>> a_set = set(["a","i"])
>> type(a_set)
<type '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 "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
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 "<stdin>", line 1, in <module>
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




     本文转自品鉴初心51CTO博客,原文链接:

http://blog.51cto.com/wutengfei/2059440

,如需转载请自行联系原作者



相关文章:

  • 转java中静态方法和非静态方法的存储
  • 五周第二次课(11月14日) 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装...
  • Android样式的开发:Style篇
  • npm-folders
  • Android怎么使用字体图标 自定义FontTextView字体图标控件-- 使用方法
  • JAVA 设计模式 模板方法模式
  • C++primer 9.49
  • springmvc学习笔记--json--返回json的日期格式问题
  • 在php中,如何将一个页面中的标签,替换为用户想输出的内容
  • docker常用命令
  • Java 反射 ParameterizedType 参数化类型
  • 基于jQuery的下拉菜单插件,诸位上眼!!!
  • 【转】整理了一些常用的面试题,掌握了这些基本上就没什么问题了
  • linux 内核库函数 【转】
  • java 切割日期时间段,分割时间段
  • 分享的文章《人生如棋》
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • CEF与代理
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • FineReport中如何实现自动滚屏效果
  • leetcode386. Lexicographical Numbers
  • Spring Cloud中负载均衡器概览
  • Terraform入门 - 1. 安装Terraform
  • 安装python包到指定虚拟环境
  • 思考 CSS 架构
  • 网页视频流m3u8/ts视频下载
  • 温故知新之javascript面向对象
  • 我与Jetbrains的这些年
  • 小程序button引导用户授权
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 【云吞铺子】性能抖动剖析(二)
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #stm32驱动外设模块总结w5500模块
  • #Z2294. 打印树的直径
  • (4)logging(日志模块)
  • (Python第六天)文件处理
  • (solr系列:一)使用tomcat部署solr服务
  • (zhuan) 一些RL的文献(及笔记)
  • (二)linux使用docker容器运行mysql
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (强烈推荐)移动端音视频从零到上手(上)
  • (全注解开发)学习Spring-MVC的第三天
  • .net mvc 获取url中controller和action
  • .net开发时的诡异问题,button的onclick事件无效
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET业务框架的构建
  • @Autowired自动装配
  • @RequestBody与@ModelAttribute
  • [ C++ ] 继承
  • []sim300 GPRS数据收发程序
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [APIO2015]巴厘岛的雕塑
  • [bzoj1324]Exca王者之剑_最小割