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