python for循环枚举数组

时间:2018-04-05 06:04:54

标签: 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")

为什么不打印任何东西?我把print hello部分放在第二个for循环中,看看它是否会迭代。

1 个答案:

答案 0 :(得分:5)

enumerateiterator。迭代器只能使用一次;之后,他们就会空着。

简单(和惯用)解决方案是为每个循环创建一个新的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))

在这种情况下,没有理由这样做。你只是在浪费内存来构建列表。 (至于速度,对于非常小的列表来说它可能会快一点,但对于非常大的列表来说可能会慢一些 - 但对于你的代码来说,这可能并不重要。)但是有些情况下它会出现这种情况。有用,所以值得知道如何做。