0
点赞
收藏
分享

微信扫一扫

python列表生成的几种不同方式及效率

诗尚凝寒 2022-04-21 阅读 196
pythonlist

在书写代码时,相信列表一定是大家经常使用的,那么有时候如何取快速生成一个列表呢,每种方式的效率如何呢,今天给大家介绍一下常见的列表生成方式及它们的效率。

1、常见的列表生成方式

a: for i in range()生成

这应该是比较常见的一种方式了,直接填入数据即可,默认起始值为0,步长为1,这里介绍两种方式,直接加入列表和直接在列表内生成。

效果如下:

b: for i in range()与函数结合快速生成列表

在这里先简单介绍几个函数的用法

(1)、append()函数

用法:list.append(obj)

obj:需要添加的元素

append()函数会直接把元素添加到列表的末尾,不管列表是否为空。

(2)、insert()函数

用法:list.insert(index,obj)

obj:需要添加的元素

index:为列表索引,该元素插入的位置

insert()函数可以把目标元素插入到任意位置,填入相应的索引即可。

(3)、extend()函数

用法:list.extend(obj)

obj:需要添加的元素

但是extend()函数添加时,obj必须为列表或者是可迭代对象。

(4)、list()函数

list()函数是Python的内置函数。它可以将任何可迭代数据转换为列表类型,并返回转换后的列表。当参数为空时,list函数可以创建一个空列表。

我们使用这些函数来和for i in range()结合使用,能达到我们的目标效果。

 

2、几种方法的效率

上述方法均可以达到快速生成一个列表的原因,但既然是不同的方法,从算法的角度来讲,必定有其优劣,那么下面我们就来用每个方法列表生成的时间去衡量一下它的优劣。这里的话,先给大家介绍一个新模块,即timeit模块,用来测算每种方法生成列表的时间。

a:timeit模块介绍

timeit模地可以用来测试一-小段Python代码的执行速度。

用法:

class timeit.Timer(stmt='pass', setup='pass', timer= <timer function>)

Timer是测量小段代码执行速度的类。

stmt参数是要测试的代码语句(statment) ;

setup参数是运行代码时需要的设置;

timer参数是一个定时器函数,与平台有关。

timeit.Timer.timeit(number=1000000)


Timer类中测试语句执行速度的对象方法。number参 数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。

代码如下:

 这里我们让程序去执行10000次,然后将程序时间直接进行打印,可以看出一个列表不同方法的生成时间。

效果如下:

在这里可以看出,使用list()函数去生成列表是比较快的,而使用insert()和extend()函数则时间会比长一些,大家有兴趣也可以自己去研究一下,当然可以多运行几次看一下,不过每次运行的时间都大同小异,结果是差不多的。

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 20 21:19:57 2022

@author: tang
"""



from timeit import Timer


def test1():
    a=[]
    for i in range(10000):
        a.append(i)
 
        

def test2():
    a=[]
    for i in range(10000):
        a+=[i]


def test3():
    a=[ i for i in range(10000)]
   
        
def test4():
    a=list(range(10000))
    

def test5():
    a=[]
    for i in range(10000):
        a.extend([i])
        
def test6():
    a=[]
    for i in range(10000):
        a.insert(-1,i)


timer1=Timer("test1()","from __main__ import  test1")
print("append:" ,timer1.timeit(10000))

timer1=Timer("test2()","from __main__ import  test2")
print("+ :" ,timer1.timeit(10000))

timer1=Timer("test3()","from __main__ import  test3")
print("[i for i in range] :" ,timer1.timeit(10000))

timer1=Timer("test4()","from __main__ import  test4")
print("list():" ,timer1.timeit(10000))

timer1=Timer("test5()","from __main__ import  test5")
print("extend:" ,timer1.timeit(10000))

timer1=Timer("test6()","from __main__ import  test6")
print("insert:" ,timer1.timeit(10000))

今天的内容就介绍到这里,希望对大家有帮助。

举报

相关推荐

0 条评论