原文:http://blog.51cto.com/10616534/1944841

Python除了List、Tuple、Dict等常用数据类型外,还有一种数据类型叫做集合(set),集合的最大特点是:集合里边的元素是不可重复的并且集合内的元素还是无序的,所以一般情况下集合常用的两个场景是:1.去重(如:列表去重);2.关系测试(如:取交集、取并集、取差集等)

1)集合包含一组无序的对象,可以使用set()函数来像下边的方式一样来创建集合

#!/usr/bin/env python
# -*-coding:UTF-8 -*-
#创建一个数值集合
set1 = set([1,2,3,4])
#创建一个字符集合 注意:从输出结果中我们会看到l只出现了一次
set2 = set("HelloWorld!")
print('set1 %s' % set1)
print('set2 %s' % set2)
'''运行结果
set1 {1, 2, 3, 4}
set2 {'d', 'o', 'e', 'H', 'l', 'W', 'r', '!'}
'''
 

2)去重,即可能在一些特殊的场景需要用到,实现去除掉列表中的重复元素

#!/usr/bin/env python
# -*-coding:UTF-8 -*-
#列表去重比较简单
list1 = [3,3,3,4,5,3]
set1 = set(list1)
print("list1去重后的set集合:",set1)
#将如中后的集合在转化成一个新列表
new_list = [i for i in set1]
print("list1去重后的list列表:",new_list)
'''运行结果
list1去重后的set集合: {3, 4, 5}
list1去重后的list列表: [3, 4, 5]
'''
 

3)关系测试,即一些集合的最基本操作,如集合取交集、取并集、取差集、判断一个集合是不是另一个集合的子集或者父集等。

#!/usr/bin/env python
# -*-coding:UTF-8 -*-
set1 = set([1,2,3,4,5])
set2 = set([3,4,5,6,7])
#取交集
set3 = set1.intersection(set2)
# set3 = set1 & ste2 #取交集,与intersection()效果相同
print("set1和set2的交集为:",set3)
#取并集
set4 = set1.union(set2)
#set4 = set1 | set2 #取并集,与union()效果相同
print("set1和set2的交集为:",set4)
#取差集 这个地方要稍稍注意一下,防止进坑
set5 = set1.difference(set2)
#set5 = set1 - set2 #取差集 ,与difference()效果相同
print("set1与set2的差集为:",set5)
set6 = set2.difference(set1)
print("set2与set1的差集为:",set6)
#对称差集 -----即去掉两个集合的共同的部分
set7 = set1.symmetric_difference(set2)
#set7 = set1 ^ set2 #对称差集, 与symmetric_difference()效果相同
print("去掉两个集合的共同的部分:",set7)
#判断是否是set1是否是set2的子集
flag1 = set1.issubset(set2)
print("print(判断是否是set1是否是set2的子集):",flag1)
#判断是否是set1是否是set2的父集
flag2 = set1.issuperset(set2)
print("判断是否是set1是否是set2的父集:",flag2)
'''运行结果如下:
set1和set2的交集为: {3, 4, 5}
set1和set2的交集为: {1, 2, 3, 4, 5, 6, 7}
set1与set2的差集为: {1, 2}
set2与set1的差集为: {6, 7}
去掉两个集合的共同的部分: {1, 2, 6, 7}
print(判断是否是set1是否是set2的子集): False
判断是否是set1是否是set2的父集: False
'''
 

4)集合的一些其它基本操作

#!/usr/bin/env python
# -*-coding:UTF-8 -*-
#输出集合中的元素
#注意集合与列表和元组不同,集合是无序的,所以无法通过数字进行索引获取某一个元素的值
set1 = set([1,2,3,4])
for i in set1:
print (i)
#向集合中添加一个元素
set1.add(5)
print("向集合中添加一个元素5后:",set1)
#删除一个元素
set1.remove(1)
print("从集合中删除元素1后:",set1)
#计算集合的长度
l = len(set1)
print("集合的长度为:",l)
#判断某个元素是否在集合内
flag1 = 2 in set1
print("判断元素2是否在集合内:",flag1)
#断某个元素是否不在集合内
flag2 = 3 not in set1
print("判断元素3是否不在集合内:",flag2)
#对集合进行一次浅复制
set2 = set1.copy()
print("对集合进行一次浅复制:",set2)
'''运行结果如下:
1
2
3
4
向集合中添加一个元素5后: {1, 2, 3, 4, 5}
从集合中删除元素1后: {2, 3, 4, 5}
集合的长度为: 4
判断元素2是否在集合内: True
判断元素3是否不在集合内: False
对集合进行一次浅复制: {2, 3, 4, 5}
'''
 

以上是集合(set)的一些比较常用操作的示例,对于集合的一些其它操作,这里就不在一一举例说明了。

(转)Python中集合(set)的基本操作以及一些常见的用法的更多相关文章

  1. Python中集合set()的使用及处理

    在Python中集合(set)与字典(dict)比较相似,都具有无序以及元素不能重复的特点 1.创建set 创建set需要一个list或者tuple或者dict作为输入集合 重复的元素在set中会被自 ...

  2. python中的filter、map、reduce、apply用法

    1. filter 功能: filter的功能是过滤掉序列中不符合函数条件的元素,当序列中要删减的元素可以用某些函数描述时,就应该想起filter函数. 调用: filter(function,seq ...

  3. python中集合set,字典dict和列表list的区别以及用法

    python中set代表集合,list代表列表,dict代表字典 set和dict的区别在于,dict是存储key-value,每一个key都是唯一的,set相对于dict存储的是key,且key是唯 ...

  4. python中 Lambda,Map,Filter,Itertools,Generator高级函数的用法

    Lambda 函数 Lambda 函数是一种比较小的匿名函数--匿名是指它实际上没有函数名. Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda ...

  5. python中使用 C 类型的数组以及ctypes 的用法

    Python 在 ctypes 中为我们提供了类似C语言的数据类型, 它的用途(我理解的)可能是: (1) 与 其他语言(如 C.Delphi 等)写的动态连接库DLL 进行交换数据,因为 pytho ...

  6. python中os.path.isdir()等函数的作用和用法

    一 用法和概念: Python中的os模块用于和系统进行交互,其中: 1 os.listdir()用于返回一个由文件名和目录名组成的列表,需要注意的是它接收的参数需要是一个绝对的路径. 2 os.pa ...

  7. python 中进制转换及format(),int()函数用法

    python中数值型变量好像只能是十进制形式表示,其他类型变量只能以字符串形式存在,可以通过format函数将int类型变量转换成其他进制字符串,如下所示: v_code=15 # 2进制 x=for ...

  8. python中集合-set

    集合-set 集合是高中数学中的一个概念 一堆确定的无序的唯一的数据,集合中每一个数据成为一个元素 # 集合的定义 s = set() print(type(s)) print(s) print(&q ...

  9. Python学习-31.Python中集合的一些操作

    add方法: s = {1,2,3} s.add(4) print(s)# {1, 2, 3, 4} 同list的append方法,若调用s.add(3),则不会有任何影响.这点与C#中的HashSe ...

随机推荐

  1. 第1章 (名词)Le nom

    ★名词的种类:(1)普通名词 —专有名词,如:          un livre —la Chine(2)可数名词—不可数名词,如:          un ami —le lait(3)具体名词— ...

  2. java NIO编程(转)

    一.概念 在传统的java网络编程中,都是在服务端创建一个ServerSocket,然后为每一个客户端单独创建一个线程Thread分别处理各自的请求,由于对于CPU而言,线程的开销是很大的,无限创建线 ...

  3. HDU 1513 && POJ 1159 Palindrome (DP+LCS+滚动数组)

    题意:给定一个字符串,让你把它变成回文串,求添加最少的字符数. 析:动态规划是很明显的,就是没有了现思路,还是问的别人才知道,哦,原来要么写,既然是回文串, 那么最后正反都得是一样的,所以我们就正反求 ...

  4. web service 架构

                                        Web services architecture The service provider sends a WSDL file ...

  5. HDU6027 Easy Summation 2017-05-07 19:02 23人阅读 评论(0) 收藏

    Easy Summation                                                             Time Limit: 2000/1000 MS ...

  6. hdu 1205 吃糖果【鸽巢原理】

    题目 这道题不难,看别人博客的时候发现大家都说用鸽巢原理,这是个什么鬼,于是乎百度之. 1.把某种糖果看做隔板,如果某种糖果有n个,那么就有n+1块区域,至少需要n-1块其他种糖果才能使得所有隔板不挨 ...

  7. 分离 桂林电子科技大学第三届ACM程序设计竞赛

    链接:https://ac.nowcoder.com/acm/contest/558/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  8. 好用的SHELL小编程

    1>判断输入为数字,字符或其他      脚本代码:      检测结果:   2>求平均数:   测试效果:     3>自减输出: 脚本代码: 测试效果:    4>在文件 ...

  9. android应用搬家的实现

    android手机上的应用搬家功能,具体的介绍和原理参考: 系统目录及应用搬家的研究 应用搬家的实现 这里主要是作为一个补充,因为上面两篇文章虽然讲的挺好的,但是给出的例子不能直接运行,还是需要一些准 ...

  10. SQL导入的方法,网上看到的

    -------这是一个新表,准备用来导入的表 CREATE TABLE CSVTable( Name NVARCHAR(MAX), Email NVARCHAR(MAX), Area NVARCHAR ...