python列表理解的评估

我有一个列表理解,我希望它比循环等效的性能更好.但是,我不确定python如何评估理解力.如果首先评估宽度,则该操作非常昂贵,但是,似乎可以在每个步骤中对它们全部进行评估,只需要对数据进行一次评估并通过循环即可.我想知道的列表理解如下.

[(Counter(x.keys()), x) for x in [Counter([hashxx(w)%100000 for w in n.split()]) for n in x]]

如何评估?会计算哈希值,然后冒泡到外循环,还是先计算所有哈希值?

解决方法:

列表推导始终会在发生的地方得到完全评估,就像其他任何表达式(如b)一样.列表理解不会“知道”它在另一个列表理解中,因此在此基础上它不会有任何不同.

如果要“逐位”迭代,一次仅从列表理解中生成一项,则使用generator expression.

这是一个简单的比较:

def inner(x):
    print("inner")
    return x.upper()

def outer(x):
    print("outer")
    return x+"!"

# inner comprehension is a list comprehension
>>> [outer(x) for x in [inner(x) for x in ('a', 'b', 'c')]]
inner
inner
inner
outer
outer
outer
['A!', 'B!', 'C!']

# inner comprehension is a generator comprehension
>>> [outer(x) for x in (inner(x) for x in ('a', 'b', 'c'))]
inner
outer
inner
outer
inner
outer
['A!', 'B!', 'C!']
上一篇:使用Python优化字符串解析


下一篇:c#-优化对数组中的每个元素进行平方或乘法