Python 列表解析 例子 讲解 学习 list comprehension in python demo

本文详细介绍了Python的列表解析(List Comprehension),包括它的概念、性能优势,并通过多个示例演示了如何使用列表解析,包括带有条件判断的情况。文章还对比了列表解析与其他方法(如for循环、map)的性能,并提醒读者在使用列表解析时需要注意的细节。
摘要由CSDN通过智能技术生成

原创,如转载请注明出处http://blog.csdn.net/menglongli/article/details/17450607

概念

首先说一下什么是列表解析:

基本概念就是一种语法结构,其存在是为了方便通过已有列表,去方便快速创建新的列表。

[expression for target1 in iterable1 [if condition1]
   for target1 in iterable2 [if condition2]
   for target1 in iterable3 [if condition3]
   for target1 in iterable4 [if condition4]
   ... .... ... .... ... ... ... ... ... ... ... ... ... ... .
  for targetN in iterableN [if conditionN]]



以上便是通用的表达式;


性能

这里说他速度快,主要是和写for循环相比。

列表解析的速度很快,因为循环是在C而不是在Python中执行。

我写了几行代码来进行一下比较,给大家一点直观的感受

比如现在给定一个小写字母的列表形如['a', 'b' , 'c',....'y', 'z', 'a' ,'b',.....]

生成如上列表的代码如下:

myAlphaList=map(chr,range(97,123))*10000

现在想要生成另外一个列表,里面的字母和上面相同,但是要求均为大写,为了实现这一小功能,我写了几个不同的函数,然后我会分别对其进行“跑分”看一下效果:

这里用来“跑分”的计时函数,如下:

from timeit import Timer
from functools import partial

def get_execution_time(function, *args, **kwargs):
    """Return the execution time of a function in seconds."""
    numberOfExecTime = kwargs.pop('numberOfExecTime', 1)
    return round(Timer(partial(function, *args, **kwargs))
                 .timeit(numberOfExecTime), 5)
下面分别是几个完成同样功能,即生成新的元素为大写的列表,但是实现方式有别的函数,代码如下:


def lstToUpperUsingRawFor(lst):
    newLst=[]
    length=len(lst)
    for i in range(length):
        newLst.append(lst[i].upper())
    return newLst

def lstToUpperUsingForeach(lst):
    newLst=[]
    for e in lst:
        newLst.append(e.upper())
    return newLst

def lstToUpperUsingMap(lst):
    newLst = map(str.upper, lst)
    return newLst

def lstToUpperUsingListComprehension(lst):
    newLst=[e.upper() for e in lst]
    return newLst

然后我们调用一下这四个函数,分别看一下运行的速度:

n=50
print 'for',\
get_execution_time(lstToUpperUsingRawFor, myAlphaList,numberOfExecTime=n)
print &
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值