Преобразование нетривиального ввода String в целочисленный кортеж в Python - PullRequest
0 голосов
/ 28 января 2019

так что мои входные данные - это список строк вроде этого:

coordIndex = 
[' 8, 9, 6, 4, 2, 0, -1,', 
 ' 11, 1, 3, 5, 7, 10, -1,', 
 ' 1, 11, 8, 0, -1,', 
 ' 3, 1, 0, 2, -1,', 
 ' 5, 3, 2, 4, -1,', 
 ' 7, 5, 4, 6, -1,', 
 ' 10, 7, 6, 9, -1,', 
 ' 11, 10, 9, 8, -1']

И это должен быть кортеж типа int:

coordIndex=
[[8, 9, 6, 4, 2, 0],
[11, 1, 3, 5, 7, 10],
[1, 11, 8, 0], 
[3, 1, 0, 2], 
[5, 3, 2, 4], 
[7, 5, 4, 6], 
[10, 7, 6, 9], 
[11, 10, 9, 8]]

Я могу стеретьпробел, избавьтесь от запятой, выполните синтаксический анализ int, выполнив следующее:

coordIndex =  [x.replace(' ','') for x in coordIndex]
coordIndex =  [x.replace(',-1,','') for x in coordIndex]
coordIndex =  [x.replace(',-1','') for x in coordIndex]
coordIndex =  [x.replace(',',' ') for x in coordIndex]
coordIndex =  [x.rstrip() for x in coordIndex]
j = 0
for items in coordIndex:
   coordIndex[j] = tuple(map(int, items.split(' ')))
   j+=1

Однако у меня есть проблемы с "-1" из входных данных, находящихся в новой строке.«-1» всегда является разделителем для каждой строки кортежа, которую я должен создать, но я не понимаю, как этого можно достичь в python.

Если у кого-то есть идея, помощь будет высоко оценена.Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Я бы предложил не читать файл построчно, потому что вам в основном нужен альтернативный способ разбора enline.Подумайте о:

with open('datafile.txt') as f:
    data = f.read()

data = data.replace(' ', '').replace(',\n', '')
lines = data.split(',-1'))
index = [tuple(l.strip(',').split(',')) for l in lines if l]
0 голосов
/ 28 января 2019

Вы можете сделать следующее:

[list(map(int,tuple(i.replace(' ','').split('-1')[0].split(',')[:-1]))) for i in s]

[(18, 19, 7, 8),
 (19, 10, 6, 7),
 (10, 11, 5, 6),
 (11, 12, 4, 5),
 (12, 13, 3, 4),
 (13, 14, 2, 3),
 (14, 15, 1, 2),
 (15, 16, 0, 1),
 (16, 17, 9, 0),
 (17, 18, 8, 9),
 (9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 5),
 (19, 18, 17, 16, 15, 14, 13, 12, 11, 10)]
...