2016-07-18 2 views
1

Результат одной из моих программ - это двумерный массив, например.Простой способ чтения двумерного массива в Python

[[1,2,3],[4,5,6,7],[8,9]] 

неопределенной длины. Я пишу этот вывод как одну строку в файл geno_matrix, который затем мне нужно прочитать в другой программе для анализа и обработки. Мне нужно прочитать это в другой программе как еще 2-мерный массив.

Очевидно, что расщепление на , не будет работать, потому что я приведу список скобок и отдельных номеров. Если я сделаю

for line in geno_matrix: 
    vec = line.rstrip('\n').split(',') 

это отделит все записи (и скобки). Я также попытался

vec = line.rstrip('\n').split(',[') 

, который возвращает список

['[[1,2,3],[4,5,6,7],[8,9]]'] 

так что vec[0] является строкой (не массив) '[[1,2,3],[4,5,6,7],[8,9]]', который возвращает меня к первоначальной раздельной проблеме. Каков самый простой способ прочитать исходный 2-й список как таковой с Python?

+4

Вы можете попробовать использовать 'json' –

+1

' json.loads ('[[1,2,3], [4,5,6,7], [8,9]]') ' – dnit13

+0

Спасибо, что работает. Я не знал о кодировщике json. – Max

ответ

2

Вы можете использовать ast «s literal_eval функции:

from ast import literal_eval 
literal_eval('[[1,2,3], [4,5,6,7], [8,9]]') 

даст вам [[1,2,3], [4,5,6,7], [8,9]] как массив.

0

Делать это дает вам список строк, каждая строка, представляющая вектор:

"[[1,2,3],[4,5,6,7],[8,9]]".lstrip('[[').rstrip(']]').split(r'],[') 

, как так:

['1,2,3', '4,5,6,7', '8,9'] 

Вы можете затем разделить отдельные строки в списках.

+0

Я подумал об этом, но предположил, что существует более «элегантный» способ разделения списка списков. – Max

Смежные вопросы