热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python基础第三天:集合、copy、deepcopy

一、集合集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合坐不了字典的键)的。以下是集合最重要的两点:1、去重:把一个列

一、集合

  集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合坐不了字典的键)的。

  以下是集合最重要的两点:

    1、去重:把一个列表变成集合,就去重了

    2、关系测试:测试两组数据之前的交集、差集、并集等关系

  1、集合的创建:

  set1 = set({1,2,'barry'})   set2 = {1,2,'barry'}   print(set1)   print(set2)
  {1, 2, 'barry'}
  {
1, 2, 'barry'}

  2、集合的增

  set1 = {'alex','wusir','ritian','egon','barry'}   set1.add('景女神')   print(set1)   #update:迭代着增加
  set1.update('A')   print(set1)   set1.update('老师')   print(set1)   set1.update([1,2,3])   print(set1)
  {'wusir', '景女神', 'ritian', 'alex', 'barry', 'egon'}   {'wusir', '景女神', 'ritian', 'A', 'alex', 'barry', 'egon'}   {'wusir', '', '景女神', '', 'ritian', 'A', 'alex', 'barry', 'egon'}   {1, 2, 3, 'wusir', '', '景女神', '', 'ritian', 'A', 'alex', 'barry', 'egon'}

  3、集合的删除

  set1 = {'alex','wusir','ritian','eqon','barry'}   print(set1)   #删除一个元素
  set1.remove('alex')   print(set1)   #删除第一个元素
  set1.pop()   print(set1)   #清空集合
  set1.clear()   print(set1)   del set1 #删除集合
  print(set1)
  {'ritian', 'wusir', 'alex', 'barry', 'eqon'}   {'ritian', 'wusir', 'barry', 'eqon'}   {'wusir', 'barry', 'eqon'}   set()   Traceback (most recent call last):    File "D:/pythonStudy12/day02/05.py", line 32, in 
      print(set1)   NameError: name 'set1' is not defined

  4、集合的其他操作:交集(& 或 intersection)、并集(| 或 union)、差集(- 或 difference)、反交集(^ 或 sysmmertric_difference)、子集、超集

  set1 = {1,2,3,4,5}   set2 = {4,5,6,7,8} 
  print("交集:")   print(set1 & set2)   print(set1.intersection(set2))   print("并集:")   print(set1 | set2)   print(set1.union(set2))   print("差集:")   print(set1 - set2)   print(set1.difference(set2))   print("交反集:")   print(set1 ^ set2)   print(set1.symmetric_difference(set2))
  交集:   {4, 5}   {4, 5}   并集:   {1, 2, 3, 4, 5, 6, 7, 8}   {1, 2, 3, 4, 5, 6, 7, 8}   差集:   {1, 2, 3}   {1, 2, 3}   交反集:   {1, 2, 3, 6, 7, 8}   {1, 2, 3, 6, 7, 8}
  #超集、子集
  set1 = {1,2,3}   set2 = {1,2,3,4,5,6}   #set1是set2子集
  print(set1 < set2)   print(set1.issubset(set2))   #set2是set1超集
  print(set2 > set1)   print(set2.issuperset(set1))
  True
  True
  True
  True

  5、frozenset不可变集合,让集合变成不可变类型

    s = frozenset('barry') print(s,type(s))
  frozenset({'b', 'r', 'a', 'y'}) <class 'frozenset'>

二、深浅拷贝

  1、赋值运算

    对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的

  

  l1 = [1,2,3,['barry','alex']]   l2 = l1   l1[0] = 111
  print(l1)   print(l2)   l1[3][0] = 'wusir'
  print(l1)   print(l2)
  [111, 2, 3, ['barry', 'alex']]   [111, 2, 3, ['barry', 'alex']]   [111, 2, 3, ['wusir', 'alex']]   [111, 2, 3, ['wusir', 'alex']]

   2、浅拷贝:copy

  对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性

  l1 = [1,2,3,['barry','alex']]   l2 = l1.copy()   print(l1,id(l1))   print(l2,id(l2))   l1[1] = 222
  print(l1,id(l1))   print(l2,id(l2))   l1[3][0] = 'wusir'
  print(l1,id(l1))   print(l2,id(l2))
  [1, 2, 3, ['barry', 'alex']] 35640712
  [1, 2, 3, ['barry', 'alex']] 35640840   [1, 222, 3, ['barry', 'alex']] 35640712   [1, 2, 3, ['barry', 'alex']] 35640840   [1, 222, 3, ['wusir', 'alex']] 35640712   [1, 2, 3, ['wusir', 'alex']] 35640840

  3、深拷贝:deepcopy

  对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变

  

  import copy   l1 = [1, 2, 3, ['barry', 'alex']]   l2 = copy.deepcopy(l1)   print(l1,id(l1))   print(l2,id(l2))   l1[1] = 222
  print(l1,id(l1))   print(l2,id(l2))   l1[3][0] = 'wusir'
  print(l1,id(l1))   print(l2,id(l2))
  [1, 2, 3, ['barry', 'alex']] 42286728   [1, 2, 3, ['barry', 'alex']] 42451912

  [1, 222, 3, ['barry', 'alex']] 42286728   [1, 2, 3, ['barry', 'alex']] 42451912

  [1, 222, 3, ['wusir', 'alex']] 42286728   [1, 2, 3, ['barry', 'alex']] 42451912

推荐阅读
  • 一.元祖类型 (tuple)1.什么是元祖?用途:用于存放多个值,当存放的多个值只有读的需求没有改变的需求时,用元祖最合适.定义方式:在()内用逗号分隔开的多个任意类型的值t(1, ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • Python中程序员的面试题有哪些
    小编给大家分享一下Python中程序员的面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 第八章 元组与集合
    目录​一、元组二、集合三、集合的数学操作四、集合的相关操作五、集合间的关系六、列表、元组、集合、字典区别一、元组元组是python内置的数据结构之一, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 用户视图(查看运行状态或其他参数)系统视图(配置设备的系统参数)system-viewEntersystemview,returnuservi ... [详细]
  • 数学和统计方法sum对数组中全部或某轴向的元素求和。零长度的数组的sum为0。mean算术平均数。零长度的数组的mean为NaN。importnumpyas ... [详细]
  • 基于halcon的特征匹配实例
    特征匹配原图模板识别图代码结果原图模板识别图代码*这个例子在图片数据库中查找文章的页面。*第一步是训练不同的页面并创建模型。*然后搜索未知图像并检测出正确的文章页面。*请注意& ... [详细]
author-avatar
肾虚养生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有