我想读取包含由空格分隔的整数的单行输入。 目前我使用以下内容。
A = map(int, raw_input().split())
但是现在N大约是10 ^ 5并且我不需要整个整数数组,我只需要按照与输入相同的顺序一次读取它们。
你能否在Python2.7中建议一种有效的方法
答案 0 :(得分:1)
您可以一次解析一个字符的数据,这会减少内存使用量:
import socket
from thread import *
host = ''
port = 1000
max_connections = 5
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((host, port))
socket.listen(max_connections)
try:
while True:
client_socket, addr = socket.accept()
start_new_thread(i_manage_client, (client_socket,addr))
except KeyboardInterrupt:
socket.close()
def i_manage_client(client_socket, addr): #Function to manage clients
client_socket.send('Message to pass')
data = client_socket.recv(4096)
print(client_socket)
print(addr)
print(data)
给你:
data = "1 50 30 1000 20 4 1 2"
number = []
numbers = []
for c in data:
if c == ' ':
if number:
numbers.append(int(''.join(number)))
number = []
else:
number.append(c)
if number:
numbers.append(int(''.join(number)))
print numbers
虽然可能有点慢。
或者,您可以使用itertools.groupby()
来读取数字组,如下所示:
[1, 50, 30, 1000, 20, 4, 1, 2]
答案 1 :(得分:1)
使用生成器:
numbers = '1 2 5 18 10 12 16 17 22 50'
gen = (int(x) for x in numbers.split())
for g in gen:
print g
1
5
6
8
10
12
68
13
生成器对象一次只能使用一个项目,并且不会构建整个列表。
答案 2 :(得分:0)
如果您能够销毁原始字符串,则split会接受最大休息次数的参数。
有关详细信息和示例,请参阅docs。