如何在不转换为列表的情况下再次迭代地图?

时间:2019-06-17 13:49:37

标签: python dictionary

项目列表作为地图对象存在。我必须对此进行2次迭代才能得到答案。无需转换为列表是否可以?

if __name__ == '__main__':
    arr = map(int, input().split())

    large = 0
    for item in arr:
        if item > large:
            large = item
    print(large)

    second = 0
    for item in arr:
        if item < large and item > second:
            second = item
    print(second)

输入“ 2 3 4 6 6”的预期结果为     6     4

以上代码的结果是     6     0

3 个答案:

答案 0 :(得分:1)

此代码在单个循环中复制代码的行为。

if __name__ == '__main__':
    arr = map(int, input().split())

    large = 0
    second = 0
    for item in arr:
        print('%s %s %s %s %s' %(item, large, second, item < large, item > second))
        if item > large:
            second = large
            large = item
        elif item < large and item > second:
            second = item
    print(large)
    print(second)

答案 1 :(得分:0)

根据map的文档:Return an iterator that applies function to every item of iterable, yielding the results.迭代器是单向的,有another question about "resetting" iterators, top answer is explaining why it may be a bad idea

在使用input()而不是文件时,将无法以相同的方式重新创建迭代器,因此最好的方法是创建列表。

但是,查看您的代码,您将能够一次完成该操作。 ;)-我不会张贴代码,因为它看起来像是一个编码练习,仅说明如何执行此操作:在第一次运行时已经使用了两个变量(或2元素元组或2元素列表)。新数字大于两者?更改两个值。他们之间有新号码吗?仅更改第二个。

答案 2 :(得分:0)

我们可以遍历单循环,并且我们需要假设max和second max作为第一个元素而不是0,因为数组中的元素也可以为负数

if __name__ == '__main__':
    arr = map(int, input().split())

    large = arr[0]
    second_large = arr[0] 

    for item in arr:
        if item > large:
            large = item
        if item < second_large:
            second_large = item
    print(large, second_large)