一道python面试的一个小问题,说怎么使用一行代码将一个列表里的重复元素,其实这里只要将列表转换成集合就可以了。

定义

集合跟我们学的列表有点像,也是可以存一堆数据,不过它有几个独特的特点,令其在整个Python语言中占有一席之地,

    1. 里面的元素不可变,代表你不能存一个list、dict 在集合里,字符串、数字、元组等不可变类型可以存
    1. 天生去重,在集合里没办法存重复的元素
    1. 无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,如集合{3,4,5}和{3,5,4}算作同一个集合

基于上面的特性,我们可以用集合来干2件事,去重和关系运算

 li=[1,1,'li']
a=set(li) # 可变集合/‘
print(a)
b=set('xiaohu 123')
print(b) # set是无序不重复的 # 如果要取值 1、for循环 2、迭代器

集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键
集合当中的交(
1、 & 2、集合中的方法intersection()),并(1、 | 2、 集合中的方法union(),补(1、- 2、集合中的方法difference()),差(集合中的方法symmetric_difference()
 pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu']
linuxs=['wupeiqi','oldboy','gangdan'] # 求既报名python,也报名linux的学生 ,这是用for循环实现两个集合的交集-----------------------------------------------------
l=[]
for item in pythons:
if item in linuxs:
l.append(item)
print(l) # 求报名了python,没有报名linux的学生-----------------------------------------------------------------------------------
l=[]
for item in pythons:
if item not in linuxs:
l.append(item)
print(l) # 求所有报名的孩子的集合 1、 | 2、 集合中的方法union()----------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
s=a | b # 求两个集合的并集
print(s)
print(a.union(b)) # 和 | 效果一样,求两个集合的并集 # 求两个集合的交集 1、 & 2、集合中的方法intersection()----------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
s= a & b
print(s)
print(a.intersection(b)) # 求补集----------------------------------------------------------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
print(a-b) # {'biubiu', 'yuanhao', 'egon', 'alex'}
print(a.difference(b)) # {'biubiu', 'yuanhao', 'egon', 'alex'}
print(b-a) # {'oldboy'}
print(b.difference(a)) # {'oldboy'} # 求没有同时报名python和linuxs的学生------------------------------------------------------------------------------------
a=set(pythons)
b=set(linuxs)
print(a^b)
print(a.symmetric_difference(b)) # {'yuanhao', 'alex', 'oldboy', 'biubiu', 'egon'}
print(b.symmetric_difference(a)) # {'oldboy', 'biubiu', 'yuanhao', 'egon', 'alex'}

 集合中  >,>=,<,<= 父集,子集 (返回布尔值)

 set1={1,2,3,4,5}
set2={1,2,3,4} print(set1 >= set2) print(set1.issuperset(set2)) # 完全包含的意思 print(set2 <= set1) print(set2.issubset(set1)) # 子集

集合里的增与删

1、add()方法

 set1.add(88)  # 88是一个整体
print(set1)
print(set1.pop())
print(set1)

  2、discard(),remove()方法

 set1.discard(3) # 指定值删除
print(set1)
set1.remove(2) # 也是指定值删除
print(set1)
3、update()方法
 set1.update('ops')  # 与add的区别是添加几个不重复的
set1.update([123,'ooo'])
print(set1)
4、clear()方法
 set1.update('ops')  # 与add的区别是添加几个不重复的
set1.update([123,'ooo'])
print(set1)
在集合中添加元素用.add()方法,.pop方法不指定参数,随机删除,并且有返回值
单纯的删除:discard,remove 指定元素删除,元素不存在不报错,单纯的删除,没有返回值
update方法谁调用更新谁的集合
print(set('alex')==set('alexexex')) # 返回True
print(set('alex')<set('alexwwww')) # 返回True 因为右边包含左边

  

 
 

Python基本数据结构之集合的更多相关文章

  1. Python之数据结构:集合

    一.set集合 1.集合是一个无序不重复元素集,有去重的作用 set集合类需要的参数必须是迭代器类型的,如:序列.字典等,然后转换成无序不重复的元素集.由于集合是不重复的,所以可以对字符串.列表.元组 ...

  2. Python常见数据结构-Set集合

    集合基本特点 集合是无序的,且集合内无重复值. 集合不支持索引和切片 集合常见操作及方法 s1 = {1,2,3} s2 = {2,3,4} s1.add(4) #.add()方法添加一个元素 s1. ...

  3. 小白学 Python(15):基础数据结构(集合)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  4. Clojure学习03:数据结构(集合)

    Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  & ...

  5. (python数据分析)第03章 Python的数据结构、函数和文件

    本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...

  6. python的数据结构分类,以及数字的处理函数,类型判断

    python的数据结构分类: 数值型 int:python3中都是长整形,没有大小限制,受限内存区域的大小 float:只有双精度型 complex:实数和虚数部分都是浮点型,1+1.2J bool: ...

  7. Python 基本数据结构

    Python基本数据结构 数据结构:通俗点儿说,就是存储数据的容器.这里主要介绍Python的4种基本数据结构:列表.元组.字典.集合: 格式如下: 列表:list = [val1, val2, va ...

  8. 转 Python常见数据结构整理

    http://www.cnblogs.com/jeffwongishandsome/archive/2012/08/05/2623660.html Python常见数据结构整理 Python中常见的数 ...

  9. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

随机推荐

  1. Requests实践详解

    Requests是什么 Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库 如果你看过上篇文章关于urllib库的使用,你会发现, ...

  2. windows服务器多端口Redis安装步骤

    1.从官网获取最新稳定版redis文件.按端口号复制多个文件,比如6379和6380端口的文件包, 修改各自Conf文件的port号,分别为6379和6380.然后重命名为redis6379.conf ...

  3. java IO、NIO、AIO详解

    概述 在我们学习Java的IO流之前,我们都要了解几个关键词 同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调 ...

  4. SecureCRT连接虚拟机下的CentOS7

    1.首先在VMWare下配置CentOS为桥接模式: 2.查看本机ip: 3.ip addr查看centos的mac地址: 4.在root权限下修改/etc/sysconfig/network-scr ...

  5. Python学习笔记五(读取提取写入文件)

    #Python打开读取一个文件内容,然后写入一个新的文件中,并对某些字段进行提取,写入新的字段的脚本,与大家共同学习. import os import re def get_filelist(dir ...

  6. ASP.NET Core MVC/API(一)

    ASP.NET Core MVC/API(一) 文件夹说明 Pages文件夹:包括了Razor页面和支持文件 .cshtml文件:是使用了Razor语法的C#代码的HTML页面 .cshtml.cs文 ...

  7. Bran的内核开发教程(bkerndev)-05 打印到屏幕

    打印到屏幕   现在, 我们需要尝试打印到屏幕上.为此, 我们需要管理屏幕滚动, 如果能允许使用不同的颜色就更好了.好在VGA视频卡为我们提供了一片内存空间, 允许同时写入属性字节和字符字节对, 可以 ...

  8. libevent::实现的低级 socket

    LibEvent 实现的低级 ROT13 例子 #include <cstdio> #include <netinet/in.h> #include <sys/socke ...

  9. RIDE的Edit界面

    有四种类型的Edit界面(注:测试套件主要是存放测试案例,资源文件主要是存放用户关键字) 1.测试套件(file类型)的Edit界面 首先展开Setting: 对右侧红框按钮简单说明: Library ...

  10. 百万年薪python之路 -- 模块

    1.自定义模块 1.1.1 模块是什么? 模块就是文件,存放一堆常用的函数和变量的程序文件(.py)文件 1.1.2 为什么要使用模块? 1.避免写重复代码,从文件级别组织程序,更方便管理 2.可以多 ...