【问题标题】:How to simply read in input from stdin delimited by space or spaces如何简单地从由空格或空格分隔的标准输入读取输入
【发布时间】:2010-08-12 01:54:32
【问题描述】:

你好我是一个尝试学习python的人, 在 C++ 中从标准输入读取字符串我只是这样做

string str;
while (cin>>str)
    do_something(str)

但在python中,我必须使用

line = raw_input()

然后

x = line.split()

然后我必须遍历列表 x 以访问每个 str 到 do_something(str)

这似乎有很多代码只是为了让每个字符串由一个或多个空格分隔 所以我的问题是,有没有更简单的方法?

【问题讨论】:

  • C++ 代码看起来很神秘,并且充满了隐含的假设。你的真正问题是什么?

标签: python stdin raw-input


【解决方案1】:

Python 不会为您特殊化这种特定形式的输入,但是为它制作一个小生成器当然是微不足道的:

def fromcin(prompt=None):
  while True:
    try: line = raw_input(prompt)
    except EOFError: break
    for w in line.split(): yield w

然后,在您的应用程序代码中,您使用 for 语句循环(通常是在应用程序代码级别循环的最佳方式):

for w in fromcin():
  dosomething(w)

【讨论】:

    【解决方案2】:

    没有真正“更简单”的方法,因为 Python 没有内置的格式化字符串函数,就像 C++ 对 iostream 所做的那样。

    也就是说,您可以通过组合操作来缩短代码:

    for str in raw_input().split():
       do_something(str)
    

    【讨论】:

    • 当标准输入完成时,您的代码会传播 EOFError 异常(您确实需要 try/except 来处理它——例如,请参阅我的答案)。直接在raw_input() 的返回值上调用split,而不是将后者分配给中间变量,确实是可行的,但我认为将它们分开会导致代码更具可读性(因为无论如何你都应该为它编写一个生成器,节省一条线没什么大不了恕我直言)。
    【解决方案3】:
    map(do_something, line.split())
    

    【讨论】:

    • 缺少解释,请在您的代码中添加一些文字。
    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 2011-11-30
    • 2012-10-17
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多