Как ввести этот граф смежности в список? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть файл данных с записями, которые выглядят так:

6->26:32
10->39:30
26->28:24
3->16:19
10->35:35
10->37:19
10->31:36
10->33:32

Вот как я пытался прочитать их в список, но он не работает для двузначных чисел.

import sys, re

data = []
for line in sys.stdin.readlines():
    data.append(line.strip())

for i in range(len(data)):
    cleandata = re.findall(r"[\w']", data[i])
    print(cleandata)

Вывод, который я получаю, таков:

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

То, что я хочу, это:

[6, 26, 32]
[10, 39, 30]
[26, 28, 24]...etc

Есть предложения?

Ответы [ 4 ]

0 голосов
/ 06 ноября 2018

Я предполагаю, что переменные данные, которые вы получаете, являются списком строк:

data = ["6->26:32","10->39:30","26->28:24","3->16:19","10->35:35","10->37:19","10->31:36","10->33:32"]

Если все записи являются натуральными числами, этот код может помочь:

for line in data:
    entries =re.split("[^0-9]+",line)
    print(entries)

[^ 0-9] + - это шаблон регулярного выражения, который соответствует всем нецифровым символам. Использование re.split помогает нам удалить «->» и «:». Вывод, который я получаю:

['6', '26', '32']
['10', '39', '30']
... etc
0 голосов
/ 06 ноября 2018

Вот базовый подход с использованием str.replace():

with open('data.txt') as file:
    for line in file:
        line = line.replace('->', ' ').replace(':', ' ')
        print(list(map(int, line.split())))

Какие выходы:

[6, 26, 32]
[10, 39, 30]
[26, 28, 24]
[3, 16, 19]
[10, 35, 35]
[10, 37, 19]
[10, 31, 36]
[10, 33, 32]

Вы также можете использовать re.split():

from re import split

with open('data.txt') as file:
    for line in file:
        print(list(map(int, split('->|:', line.strip()))))
0 голосов
/ 06 ноября 2018

В дополнение к ответу @ blhsing, вы также можете использовать [0-9]:

cleandata = re.findall(r"[0-9]", data[i]) 

Если заботиться о них как о строках:

print(list(map(int,cleandata)))
0 голосов
/ 06 ноября 2018

Вместо этого вы можете использовать следующее регулярное выражение:

cleandata = re.findall(r"\d+", data[i])
...