在python2.7中从单行输入读取整数数组的内存有效方法

时间:2017-07-23 07:51:20

标签: python arrays python-2.7

我想读取包含由空格分隔的整数的单行输入。 目前我使用以下内容。

A = map(int, raw_input().split())

但是现在N大约是10 ^ 5并且我不需要整个整数数组,我只需要按照与输入相同的顺序一次读取它们。

你能否在Python2.7中建议一种有效的方法

3 个答案:

答案 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