科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件如何使用Python迭代工具模型

如何使用Python迭代工具模型

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们基本理解了Python之后,可以继续深入挖掘Python标准库来学习如何微调函数。本文我们将通过几个例子向大家介绍如何使用Python迭代工具模型。

作者:开发者在线 来源:开发者在线 2007年8月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

实现该函数的一种方法可以是遍历各个值,记录前一个值并且如果前一个值与当前值相等的将它添加到子列表中。第一次编写的代码可能如下所示:

def pack(seq):

results = []

temp = []

last = None

for current in seq:

if current == last:

temp.append(current)

else:

results.append(temp)

temp = [current]

last = current

results.append(temp)

return results

工作很好,让我们看一下它有多快。

>>> i = time.clock(); q = pack(long); print time.clock()-i
17.34

看起来不是太好,我们可以像处理压缩函数以一样将所有工作移到一个铁代工具中的函数中实现吗?下面是使用groupby函数的实现,它返回一个tuple其中包含了列表中每个项目的第一个值忽略重复的情况(像压缩函数一样)以及一个列表其中包含了所有连续的重复值(像打包pack函数一样。因此我们可以只要tuple的后半部分。

def pack2(l):

return [list(group) for name, group in groupby(l)]

当我们运行它时:

>>> i = time.clock(); q = pack2(long); print time.clock()-i
36.41

这更糟糕,因为我们做这些额外工作并将它们抛弃一边。我们真正想要做的是使用已经编写好的压缩函数,因为我们知道它的速度很快。

def pack3(seq):

it = iter(seq)

return [list(takewhile(lambda y: y==x, it))+[x] for x in compress3(seq)]

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章