以最有效的方式迭代列表中的元素。Python 2.7

2024-05-06 10:58:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图迭代一个元素列表,但是这个列表可能非常庞大,执行起来需要很长时间。我正在使用报纸api。我构建的for循环是:

for article in list_articles:

列表中的每一篇文章都是一个对象,格式如下:

^{pr2}$

我检查了有人建议使用xrange或range,但是在我的例子中这并不起作用,给出了一个类型错误:

TypeError: 'int' object is not iterable

如果有人能给我指出正确的方向,或者给我一些可以有效地增加对这个列表的迭代的想法,那就太棒了。在


Tags: 对象inapi元素列表for格式article
2条回答

下面是一个小基准,让问题更有趣:

import timeit
import random

N = 1000000


class Foo:

    def __init__(self):
        self.n = random.randint(0, 1000)

bar = [Foo() for r in xrange(N)]


def f1(lst):
    return [v for v in lst]


def f2(lst):
    return [v for index, v in enumerate(lst)]


def f3(lst):
    return [lst[i] for i in range(len(lst))]

K = 100
print timeit.timeit('f1(bar)', setup='from __main__ import f1, bar', number=K)
print timeit.timeit('f2(bar)', setup='from __main__ import f2, bar', number=K)
print timeit.timeit('f3(bar)', setup='from __main__ import f3, bar', number=K)

在我的机器里有:

^{pr2}$

结论:使用习惯用法for v in huge_list进行迭代是一个非常好的选择,因此您应该分析一下瓶颈在哪里,这可能是在内部循环(项处理)中

最好的方法是尽可能使用内置函数,例如分割字符串、连接字符串、分组等函数。。。在

可能的话,有列表理解或map。如果您需要通过操纵每个元素从另一个列表中构造一个列表,那么这就是它。在

最好的方法是for item in items循环。在

添加

让你成为一个Python程序员,成为一个更好的程序员的其中一件事是我提到的第二件事——列表理解和映射。很多时候,迭代一个列表只是为了构造一些可以用列表理解轻松完成的事情。例如:

new_items = []
for item in items:
    if item > 3:
    print(item * 10)
    new_items.append(item * 10)

您可以这样做得更好(更短、更快、更健壮):

^{pr2}$

与现在的第一行相比,不需要更多的改变。在

相关问题 更多 >