首页 > 解决方案 > 像 C++ 中的 cin >> 这样从一行中一个接一个地读取元素

问题描述

任务:

给定一个由 N 个整数组成的序列。找出这个序列有多少个元素等于这个序列的第一个元素(不计算第一个元素)。

N (1 ≤ N ≤ 10^6)
这些数字不超过 10^9 模 (abs())

示例:

输入:
6
-5 7 0 -5 3 -5

输出:
2

输入:
6
5 7 0 -5 3 -5

输出:
0

有内存限制和时间限制:32MB1秒

随着时间的流逝,一切都很棒。我的解决方案与小型测试完美配合:

input()
arr = list(map(int, input().split()))
print(arr.count(arr[0]) - 1)

通过大量测试用例,我得到了超出内存限制的错误。我需要做的是从一行输入中获取一对一的值,然后将它们删除,这样我就不会超过内存限制。

问题:在 Python 中进行单行输入时,如何逐一(而不是作为列表)获取值。

EDIT1 这不是一个合适的解决方案 - Python 中是否有`string.split()` 的生成器版本?. 我们仍然阅读整行。如果我使用该解决方案,我会收到 Time Limit Exceeded 错误。上一版题——一行一行的读取元素

标签: pythonpython-3.x

解决方案


谢谢大家,列表生成器。我为我的问题修改了它。该解决方案非常适合该问题。我希望它会帮助某人。

import re


def split_iter():
    return (x.group(0) for x in re.finditer(r"[-0-9']+", input()))


input()
gen = split_iter()
first = next(gen)
ans = 0
for i in gen:
    if i == first:
        ans += 1
print(ans)

试验结果


推荐阅读