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
.
归档时间: |
|
查看次数: |
8771 次 |
最近记录: |