python列表理解的评价

2024-09-28 01:31:08 发布

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

我有一个列表理解,我希望它比循环等价物更有效。但是,我不确定python如何评估理解。如果它首先计算宽度,那么操作就非常昂贵,但是,似乎可以在每个步骤都对它们进行求值,只需要对数据求值一次并通过循环传递。我想知道的清单如下。在

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

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


Tags: 数据in列表for宽度counter步骤keys
1条回答
网友
1楼 · 发布于 2024-09-28 01:31:08

列表理解总是在它发生的地方完全求值,就像a+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!']

相关问题 更多 >

    热门问题