2017-01-24 8 views
1

У меня есть размерный массив (8000ish entires) в python, который является краевым списком графика. часть массива выглядит так:Запись файла .gml (или файла для чтения в математике) из массива python

... [' Tulane-B (Tulane (Bacchus)) ', ' Florida Tech (Florida Tech) '], 
[' Stanford-B (Stanford Prison Experiment) ', ' San Jose State (Megabyte) '], 
[' Stanford-B (Stanford Prison Experiment) ', ' Duke (Brimstone) '], 
[' Stanford-B (Stanford Prison Experiment) ', ' Oregon State (Beavers) '],... 

Строка пар пар вершин, имеющих границу между ними.

Есть ли эффективный способ импорта этого массива в математику, чтобы он мог его прочитать? Я знаю, что математические строки окружены {. Могу ли я просто экспортировать этот массив в другом формате из python, или мне нужно перерисовать эту вещь как строку? Где мой код выглядит следующим образом:

print('{', end = '') 
for edge in named_edgelist: 
     print('{' + '\"' + edge[0] +'\"' + ", " +'\"' + edge[1] + '\"' + '},', end ='') 
print('}',end = '') 

вторых для последнего вызова печати делает лишнюю запятую, но я не беспокоюсь об этом.

Заранее спасибо.

+0

Вы должны добавить свой ожидаемый результат на ваш вопрос, так как не все кодеры Python знать Mathematica. Я предполагаю, что вы хотите что-то вроде '{{" a "," b "}, {" c "," d "}}' и т. Д. Вы можете легко сделать это с форматированием строк. Поэтому вы должны сделать попытку закодировать это самостоятельно и вставить попытку кода в вопрос. –

+0

Ваш пример - это формат, который я сделал, должен был написать это. Точка вопроса, хотя для образовательных целей, есть более простой способ сделать это. Я знаю, что могу легко форматировать строку, но чтобы сохранить будущее, мне интересно, эффективнее ли это. – tharvey

+0

Существует несколько способов сделать это с помощью форматирования строк, поэтому немного сложно предложить более эффективный способ, чем то, что вы сейчас делаете, если мы не можем реально видеть, что вы сейчас делаете. –

ответ

0

Поскольку ваши данные чистые, то есть они не содержат двойных кавычек или квадратных скобок, мы можем использовать метод str.translate для перевода собственного строкового представления Python этого списка в формат Mathematica.

Чтобы использовать str.translate, сначала нам нужно построить таблицу переводов, используя метод str.maketrans.

data = [ 
    [' Tulane-B (Tulane (Bacchus)) ', ' Florida Tech (Florida Tech) '], 
    [' Stanford-B (Stanford Prison Experiment) ', ' San Jose State (Megabyte) '], 
    [' Stanford-B (Stanford Prison Experiment) ', ' Duke (Brimstone) '], 
    [' Stanford-B (Stanford Prison Experiment) ', ' Oregon State (Beavers) '], 
] 

trans = str.maketrans("'[]", '"{}') 
s = str(data).translate(trans) 
print(s) 

выход

{{" Tulane-B (Tulane (Bacchus)) ", " Florida Tech (Florida Tech) "}, {" Stanford-B (Stanford Prison Experiment) ", " San Jose State (Megabyte) "}, {" Stanford-B (Stanford Prison Experiment) ", " Duke (Brimstone) "}, {" Stanford-B (Stanford Prison Experiment) ", " Oregon State (Beavers) "}} 

Это быстрее, чем при использовании Python петли с Python строки форматирования, так как почти вся работа делается с помощью кода, который написан на C, так что он работает на скорости C ,


FWIW, это также можно сделать в Python 2 с незначительными изменениями. В Python 2 нет метода str.maketrans. Вместо этого вам необходимо использовать вспомогательную функцию string.maketrans.


Если вы хотите, чтобы каждая строка находилась на отдельной строке, вам необходимо предварительно обработать каждую строку. Это обязательно будет немного медленнее, но разница в скорости будет едва заметна с 8000 строк.

data = [ 
    [' Tulane-B (Tulane (Bacchus)) ', ' Florida Tech (Florida Tech) '], 
    [' Stanford-B (Stanford Prison Experiment) ', ' San Jose State (Megabyte) '], 
    [' Stanford-B (Stanford Prison Experiment) ', ' Duke (Brimstone) '], 
    [' Stanford-B (Stanford Prison Experiment) ', ' Oregon State (Beavers) '], 
] 

# Convert data to strings with each row on a separate line 
s = '[\n ' + ',\n '.join([str(row) for row in data]) + '\n]' 

trans = str.maketrans("'[]", '"{}') 
s = s.translate(trans) 
print(s) 

выход

{ 
    {" Tulane-B (Tulane (Bacchus)) ", " Florida Tech (Florida Tech) "}, 
    {" Stanford-B (Stanford Prison Experiment) ", " San Jose State (Megabyte) "}, 
    {" Stanford-B (Stanford Prison Experiment) ", " Duke (Brimstone) "}, 
    {" Stanford-B (Stanford Prison Experiment) ", " Oregon State (Beavers) "} 
}