如何读取 Python 3 中忽略空格的下一个整数?有没有办法制作一个从空格分隔的整数流中返回整数的生成器?
我拥有的最好的是:
def ints():
while True:
yield from (int(x) for x in input().split())
如何读取 Python 3 中忽略空格的下一个整数?有没有办法制作一个从空格分隔的整数流中返回整数的生成器?
我拥有的最好的是:
def ints():
while True:
yield from (int(x) for x in input().split())
完全忽略空格并从文件中读取(将整数纯粹视为连续数字):
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))
如果您从标准输入读取,您可以这样做:
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 结束输入——而不仅仅是一个....)