1

如何读取 Python 3 中忽略空格的下一个整数?有没有办法制作一个从空格分隔的整数流中返回整数的生成器?

我拥有的最好的是:

def ints():
    while True:
        yield from (int(x) for x in input().split())
4

2 回答 2

3

完全忽略空格并从文件中读取(将整数纯粹视为连续数字):

import mmap
import re

with open('somefile', 'rb') as fin:
    mf = mmap.mmap(fin.fileno(), 0, access=mmap.ACCESS_READ)
    for digits in re.finditer('(\d+)', mf):
        print(digits.group(1))

或者,如果你已经把所有东西都放在了一个字符串中,那么finditer适当地调整一下,也许是这样的:

yield from (match.group(1) for match in re.finditer('\d+', some_string))
于 2013-10-21T21:17:44.940 回答
0

如果您从标准输入读取,您可以这样做:

import sys

def ints():
    for line in sys.stdin:
        rtr=[int(d) for d in line.split() if d.isdigit()] 
        if rtr:
            for n in rtr:
                yield n

print(list(ints()))

或者,如果您的 Py 3.3+ 支持生成器委托:

import sys

def ints():
    for line in sys.stdin:
         yield from (int(d) for d in line.split() if d.isdigit())

您还可以使用非常流畅文件输入,它的优点是支持文件名(然后将打开并读取该名称的文件)或来自重定向标准输入的输入:

import fileinput

def ints():
    for line in fileinput.input():
        yield from (int(d) for d in line.split() if d.isdigit())

(如果您直接或手动测试 fileinput,请知道您需要以两个CtlD 结束输入——而不仅仅是一个....)

于 2013-10-21T21:30:53.227 回答