在书写代码时,相信列表一定是大家经常使用的,那么有时候如何取快速生成一个列表呢,每种方式的效率如何呢,今天给大家介绍一下常见的列表生成方式及它们的效率。
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))
今天的内容就介绍到这里,希望对大家有帮助。