Python用于枚举阵列的循环


def miniMaxSum(arr):
    #
    # Write your code here.
    #
    eArr = enumerate(arr)
    maxNum = 0
    indexMax = -1;
    for a,b in eArr:
        if b > maxNum:
            maxNum = b
            indexMax = a
    for index,number in eArr:
        print("hello")

为什么不打印任何东西?我将打印hello部分放在第二个循环中是否迭代。

enumerate是迭代器。迭代器只能使用一次;之后,它们是空的。

简单(和惯用的(解决方案是为每个循环制作一个新的enumerate迭代器:

def miniMaxSum(arr):
    maxNum = 0
    indexMax = -1;
    for a,b in enumerate(arr):
        if b > maxNum:
            maxNum = b
            indexMax = a
    for index,number in enumerate(arr):
        print("hello")

如果您需要多次使用迭代器,则可以将其保存到列表中,然后重复使用列表。只需更改此行

eArr = enumerate(arr)

…对此:

eArr = list(enumerate(arr))

在这种情况下,没有理由这样做。您只是在浪费内存构建列表。(至于速度,对于很小的列表来说,它可能更快一些,但是对于非常大的列表来说,这对于您的代码而言可能并不重要。(但是在某些情况下,它很有用,因此值得知道如何知道如何知道做。

最新更新