请选择 进入手机版 | 继续访问电脑版

程序人生

 找回密码
 注册

QQ登录

只需一步,快速开始

程序人生 门户 Python程序员 查看内容

Python的数据结构列表,字典,集合

2016-9-17 15:24| 发布者: sean| 查看: 534| 评论: 0

摘要: 实际问题过滤列表中的负数筛选出字典种值高于90的项筛选出集合种能被3整出的元素围绕上面三个问题我们来进行讨论,比如下面有一个列表: from random import randint li = li我们常规的做法就是通过 for 循环对列表 ...
实际问题

过滤列表中的负数
筛选出字典种值高于90的项
筛选出集合种能被3整出的元素
围绕上面三个问题我们来进行讨论,比如下面有一个列表:

>>> from random import randint
>>> li = [randint(-10, 10) for _ in range(10)]
>>> li
[-10, -9, 1, 10, -3, -7, -6, -7, 4, -5]
我们常规的做法就是通过 for 循环对列表中的每一个值进行迭代,然后判断如果值大于等于0,就确定这个值是一个整数,否则就丢弃,比如下面的代码:

>>> result = []
>>> for n in li:
# 如果这个元素大于等于0
...   if n >= 0:
# 加入的result列表中
...     result.append(n)
...
>>> result
[1, 10, 4]
实例
本篇所有的代码均在 Python 3.5.x 种运行,如果你使用的是 python 2.7.x ,那么请自行测试,在此之前,请导入一下模块用于测试:

# 用于生成随机数
>>> from random import randint
# 准确测量小段代码的执行时间
>>> import timeit
请仔细阅读下面的代码,看完后你将会有不一样的收获。

列表
filter函数

生成一个随机列表

>>> li = [randint(-10, 10) for _ in range(10)]
>>> li
[6, -8, 9, 3, 3, 8, 9, -4, 9, -6]
# x=列表中的一个元素,有多少个元素就迭代多少次
>>> result = filter(lambda x: x >=0, li)
>>> for n in result:
...  print(n)
...
6
9
3
3
8
9
9
列表解析

生成一个随机列表

>>> li = [randint(-10, 10) for _ in range(10)]
>>> li
[8, -5, -2, 8, 9, 4, -6, -5, 5, 4]
>>> [x for x in li if x >=0 ]
[8, 8, 9, 4, 5, 4]
filter与列表解析性能对比

使用 filter 执行时间

>>> timeit.Timer('filter(lambda x: x >=0, [4, -1, 1, 3, -10, 5, -8, 0, 6, 3])').timeit()
0.38938787838583266
使用 列表解析 执行时间

>>> timeit.Timer('[x for x in [4, -1, 1, 3, -10, 5, -8, 0, 6, 3] if x >=0 ]').timeit()
1.1142896312373978
通过以上的测试可以看出 filter 的执行时间明显比 列表解析 要快些,当然这并不是一个非常准确的数字,还是有待考察的。

123下一页

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


关于程序人生网|小黑屋|手机版|Archiver|

程序人生 | QQ

粤公网安备 44040202000007号

( 粤ICP备13038131号-5 )

返回顶部