• 2.4.3 案例精选


      作为集合的具体应用,可以使用集合快速提取序列中单一元素,即提取出序列中所有不重复元素。如果使用传统方式,需要编写下面的代码:

     1 >>> import random
     2 >>> 
     3 >>> #生成100个介于0~9999之间的随机数
     4 >>> 
     5 >>> lr = [ random.choice(range(10000)) for i in range(100) ]
     6 >>> 
     7 >>> nr = []
     8 >>> 
     9 >>> for i in lr:
    10     if i not in nr:
    11         nr.append(i)
    12 
    13         
    14 >>> 
    15 >>> len(lr)
    16 100
    17 >>> 
    18 >>> len(nr)
    19 99
    20 >>> #说有lr中有一个重复的元素

      而如果使用集合,只需要下面这么一行代码就可以了,可以参考上面的代码对结果进行验证。

    1 >>> ns = set(lr)
    2 >>> 
    3 >>> len(ns)
    4 99
    5 >>> 

      拓展知识:结合中的元素不允许重复,Python集合的内部实现为此做了大量相应的优化,判断集合中是否包含某元素时比列表速度快很多。前面已经介绍了这个内容,这里再给一个例子,下面的diamante用于返回指定范围内一定数量的不重复数字,使用集合效率明显优于使用列表。

     1 import random
     2 import time
     3 
     4 def rn1(number,start,end):
     5 
     6     '''使用列表来生成number个介于start和end之间不重复随机数'''
     7     data = []
     8     while True:
     9         element = random.randint(start,end)
    10         if element not in data:
    11             data.append(element)
    12         if len(data) == number:
    13             break
    14 
    15     return data
    16 
    17 def rn2(number,start,end):
    18     '''使用集合来生成number个介于start和end之间不重复随机数'''
    19     data = set()
    20     while True:
    21         element = random.randint(start, end)
    22         data.add(element)
    23         if len(data) == number:
    24             return data
    25 
    26     27 
    28 
    29 start = time.time()
    30 for i in range(10000):
    31     d1 = rn1(500,1,10000)
    32 
    33 print('Time used:{}'.format(time.time() - start))
    34 
    35 
    36 start = time.time()
    37 for i in range(10000):
    38     d1 = rn2(500,1,10000)
    39 
    40 print('Time used:{}'.format(time.time() - start))
    41 
    42 
    43 #Time used:42.587281465530396
    44 #Time used:12.231086492538452

      上面的代码只是为了展示Python获取不重复元素的原理,如果在项目中需要这样的功能,可以采用如下方法:random模块的sample()方法可以直接从指定序列中选取指定数量个不重复的元素。

    1 >>> import random
    2 >>> 
    3 >>> random.sample(range(10000),20)
    4 [460, 6267, 4269, 4319, 8657, 9238, 8453, 7289, 9630, 8385, 3820, 3707, 2931, 6720, 5988, 5, 5096, 4575, 6706, 2602]
    5 >>> 

      拓展知识:Python也支持集合推导式。集合推导式是什么?请看下面代码:

     1 >>> 
     2 >>> { x.strip() for x in ('   he   ','she   ','     I')}
     3 {'I', 'she', 'he'}
     4 >>> 
     5 >>> import random
     6 >>> x = { random.randint(1,500) for i in range(100) }   #生成随机数,自动去除重复元素
     7 >>> 
     8 >>> len(x)                                              #一般而言输出结果会小于100
     9 91
    10 >>> 
    11 >>> { str(x) for x in range(10) }
    12 {'0', '7', '6', '9', '8', '3', '2', '1', '5', '4'}
    13 >>> 
  • 相关阅读:
    jQuery Eazyui的学习和使用(一)
    PHP 红包功能代码
    PHPExcel 使用学习
    AngularJS 学习笔记
    sublime 快速生成html基础代码
    mysql 重置主键
    php 常用文件操作
    Android隐藏状态栏实现沉浸式体验
    MVC
    安卓Design包之NavigationView结合DrawerLayout,toolbar的使用,FloatingActionButton
  • 原文地址:https://www.cnblogs.com/avention/p/8551095.html
Copyright © 2020-2023  润新知