Python:嵌套for循环或"next"语句

aqu*_*fan 6 python optimization for-loop

我是一个新手爱好者,当我编写python时,我会为循环嵌套,如下所示:

dict = {
    key1: {subkey/value1: value2} 
    ... 
    keyn: {subkeyn/valuen: valuen+1}
    }

for key in dict:
    for subkey/value in key:
       do it to it
Run Code Online (Sandbox Code Playgroud)

我知道一个"下一个"关键字可以在一行中完成相同的目标(我问了一个关于如何使用它的问题,但我不太了解它).

所以对我来说,嵌套的for循环更具可读性.为什么,然后人们使用"下一个"?我在某处读到Python是一种动态类型和解释型语言,因为+既支持字符串又对数字求和,它必须检查每个循环迭代的变量类型,以便知道运算符是什么,等等.使用"next"阻止这在某种程度上加快了执行速度,还是只是风格/偏好的问题?

Ale*_*lli 23

next在必要时推进迭代器是很宝贵的,没有那个进步控制显式for循环.例如,如果你想要"S中的第一个项目大于100",那么next(x for x in S if x > 100)就会给你,没有麻烦,没有大惊小怪,没有不必要的工作(因为一旦找到合适的东西,一切都会终止x) - 你得到异常(StopIteration)如果意外地没有x匹配条件.如果预期不匹配,并且您希望None在那种情况下,next((x for x in S if x > 100), None)将提供该匹配.对于这个特定的目的,如果next实际命名first,你可能会更清楚,但这会背叛它更普遍的用途.

例如,考虑合并多个序列的任务(例如,排序序列的并集或交集 - 例如,排序的文件,其中项是行).再次,next正是医生所要求的,因为通过控制A"主for循环" ,没有一个序列能够超越其他序列.因此,假设为简单起见,不存在重复项(如果需要则不会放松的条件),您将对保留(currentitem, itsfile)在受控制的列表中heapq,并且合并变得容易...但只是由于next推进正确文件的魔力一旦它的项目被使用,只有该文件.

import heapq

def merge(*theopentextfiles):
    theheap = []
    for afile in theopentextfiles:
        theitem = next(afile, '')
        if theitem: theheap.append((theitem, afile))
    heapq.heapify(theheap)
    while theheap:
        theitem, afile = heapq.heappop(theheap)
        yielf theitem
        theitem = next(afile, '')
        if theitem: heapq.heappush(theheap, (theitem, afile))
Run Code Online (Sandbox Code Playgroud)

只是尝试做任何优雅的地方,没有next...! - )

可以继续使用很长一段时间,但这两个用例"将迭代器推进到一个地方(不让它控制整个for循环)"和"从迭代器中获取第一个项目"用于最重要的用途next.