zoukankan      html  css  js  c++  java
  • 2.4.1 集合基础知识

      集合是无序可变序列,使用一对大括号(作者温馨提示:这一点和字典很类似,千万不要搞混啊)作为界定符,元素之间使用逗号分隔,同一个集合内的每个元素都是唯一的,元素之间不允许重复。

      在Python中,直接将集合赋值给变量即可创建一个集合对象。

    1 >>> a = {3,5}           #创建集合对象
    2 >>> a
    3 {3, 5}
    4 >>> 
    5 >>> type(a)             #查看对象类型
    6 <class 'set'>
    7 >>> 

      

      也可以使用set()函数将列表、元组等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只保留一个元素。

     1 >>> aset = set(range(8,14))            #创建集合对象
     2 >>> aset
     3 {8, 9, 10, 11, 12, 13}
     4 >>> 
     5 >>> bset = set([0,1,2,3,0,1,2,3,7,8])  #转换时自动去掉重复元素
     6 >>> bset
     7 {0, 1, 2, 3, 7, 8}
     8 >>> 
     9 >>> x = set()                          #创建一个空集合
    10 >>> x
    11 set()
    12 >>> 

      当不再使用某个集合时,可以使用del命令删除整个集合。

      注意:集合中是能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据。Python提供了一个内置函数hash()来计算对象的哈希值,凡是无法计算哈希值(调用hash()函数时抛出异常)的对象都不能作为集合的元素,也不能作为字典对象的“键”。

      拓展知识:字典和集合的in操作比列表快很多。相信各位读者也能有这样的体验,一个功能可以使用很多种方法实现,也可以采用不同的数据类型实现。如果仔细分析比较一下会发现,不同数据类型质监某些操作的效率相差还是很大的,在选用是应多加注意,因为不同的选择意味着不同的速度和效率。例如,由于Python字典和集合都适用hash表来存储元素,因此元素查找操作的速度非常快,这就直接决定了关键字in作用于字典和集合时比列表快的多。

     1 import random
     2 import time
     3 
     4 x = list(range(10000))     #生成列表
     5 y = set(range(10000))      #生成集合
     6 z = dict(zip(range(10000),range(10000)))   #生成字典
     7 
     8 r = random.randint(0,999)  #生成随机数
     9 
    10 start = time.time()
    11 for i in range(9999999):
    12     r in x                 #测试列表中是否包含某个元素
    13 print('list,time used:{}'.format(time.time() - start))
    14 
    15 start = time.time()
    16 for i in range(9999999):
    17     r in y                 #测试列表中是否包含某个元素
    18 print('set,time used:{}'.format(time.time() - start))
    19 
    20 start = time.time()
    21 for i in range(9999999):
    22     r in z                 #测试列表中是否包含某个元素
    23 print('dict,time used:{}'.format(time.time() - start))

      上面代码运行结果如下,对于成员测试运算符in,列表的效率远远不如字典和集合,差距简直太惊人了。大家修改一下上面代码中列表、字典和集合的长度就会发现,随着序列的变长,列表的速度越来越慢,而字典和集合基本上不受影响。

    1 list,time used:162.63028526306152
    2 set, time used:1.421081304550171
    3 dict,time used:1.3880794048309326
  • 相关阅读:
    正则表达式学习《一》
    vs2008添加模板方法
    MongoDB学习笔记《二》
    oracle存储过程错误分析
    最近一个星期的学习,比较杂乱
    C#中的委托和事件
    c++随机数字
    Delphi中的接口
    C# 泛型
    LoadString、LoadIcon和LoadCursor函数
  • 原文地址:https://www.cnblogs.com/avention/p/8546872.html
Copyright © 2011-2022 走看看