Существует несколько подходов для достижения этой цели.Ниже приведены несколько возможностей.
Использование array
Из списка
Заменить последнюю строку кода в вопросе следующим:
a.fromlist([int(val) for val in stdin.read().split()])
Сейчас:
>>> a
array('i', [1, 2, 3, 4, 5, 6])
Con: не сохраняет 2D-структуру (см. Комментарии).
От генератора
Примечание: этоопция включена из комментариев eryksun.
Более эффективный способ сделать это - использовать генератор вместо списка.Замените последние две строки кода в вопросе на:
a = array('i', (int(val) for row in stdin for val in row.split()))
Это приводит к тому же результату, что и опция выше, но избегает создания промежуточного списка.
Использование массива NumPy
Если вы хотите сохранить 2d структуру, вы можете использовать массив NumPy.Вот весь пример:
from StringIO import StringIO
import numpy as np
# fake stdin
stdin = StringIO("""1 2
3 4
5 6""")
a = np.loadtxt(stdin, dtype=np.int)
Сейчас:
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
Использование стандартных списков
Из вопроса не ясно, приемлем ли список Python.Если это так, один из способов достижения цели - заменить две последние строки кода в вопросе следующим:
a = [map(int, row.split()) for row in stdin]
После выполнения этого у нас будет:
>>> a
[[1, 2], [3, 4], [5, 6]]