V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
KIRAYOMATO
V2EX  ›  问与答

Python 如何逐个读取在同一行中以空格分隔的数据?

  •  
  •   KIRAYOMATO · 2020-10-21 13:30:05 +08:00 · 1249 次点击
    这是一个创建于 1495 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如 1 2 3 4 5 这样的
    网上找到的只有用 list(map(lambda x :int(x),input().split()))来把一整行扫成一个列表
    但是这样子如果数据太多的话 oj 就会爆内存。
    5 条回复    2020-10-21 23:37:54 +08:00
    imn1
        1
    imn1  
       2020-10-21 13:40:54 +08:00
    oj 是什么?

    其实不知道怎么回答,问题你自己已经答了
    至于你说内存会爆,那是业务流程,好像跟不是“如何读取”的问题

    怕内存爆,就读一行处理一行呗
    ysc3839
        2
    ysc3839  
       2020-10-21 14:32:20 +08:00
    自己根据 split 的算法,配合 Python 的 generator 实现一个即可。
    这里给一个只能分割单个字符的版本作为参考。由于 V2EX 会删除每行开头的空格,需要你自己补全空格使其正常工作。

    def lazy_split(str, sep):
    start = end = 0
    for ch in str:
    if ch == sep:
    yield str[start:end]
    start = end + 1
    end += 1
    yield str[start:]

    if __name__ == '__main__':
    for i in lazy_split('abc bcd cde def', ' '):
    print(repr(i))
    luckyrayyy
        3
    luckyrayyy  
       2020-10-21 14:42:39 +08:00
    oj?那你顺序读取,遇到空格就扔掉不就行了
    learningman
        4
    learningman  
       2020-10-21 19:40:18 +08:00 via Android
    算法题拿 Python 写。。。?
    我觉得 Java 都有点难
    KIRAYOMATO
        5
    KIRAYOMATO  
    OP
       2020-10-21 23:37:54 +08:00
    就是同一行里面有特别多以空格分隔的数据,全部放在一个 list 里面的话内存占用会超过题目限制
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2748 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:31 · PVG 19:31 · LAX 03:31 · JFK 06:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.