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



项目列表作为映射对象存在。我必须迭代 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 四

上述代码的结果是 6 0

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

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)

来自map的文档:Return an iterator that applies function to every item of iterable, yielding the results.迭代器是单向的,还有另一个关于"重置"迭代器的问题,首要答案是解释为什么这可能是一个坏主意。

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

但是,查看您的代码,您将能够一次性完成该操作。 ;) - 我不会发布代码,因为它看起来像一个编码练习,只解释如何做到这一点:在第一次运行期间已经使用两个变量(或 2 元素元组或 2 元素列表(。新数字比两者都大?更改这两个值。他们之间有新号码?仅更改第 2 个。

我们可以遍历单循环,我们需要假设 max 和第二个 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)

最新更新