2016-08-26 5 views
-3

Ich möchte eine Reihe von Daten in einer Datei in Form einer Liste abrufen.Hinzufügen von Klammern zu Listenelementen - Python

Hier finden Sie die Daten, die ich aus der Datei lese, die ich zur Liste hinzufügen möchten:

Datei-Eingang: (3,5), (5,2), (2,1), (4,2), (4,1), (3,1)

Der folgende Code zeigt, was ich habe jetzt:

with open("partial.txt") as f: 
List = f.read().splitlines() 

graph1 = ','.join('({0})'.format(w) for w in List) 

print (graph1) 

Der Ausgang ich erhalte, ist:

, aber ich möchte das obige Ergebnis in [], wie folgt aus:

>> [(3,5),(5,2),(2,1),(4,2),(4,1),(3,1)] 

Kann jemand zeigen, was ich tun müssen, um das obige Ergebnis

+0

Möchten Sie eine Liste der Tupel erhalten? –

+0

nur: 'result = [eval (graph1)]' –

+0

ja eine Liste von Tupeln. – user3624406

Antwort

3
import ast 

s = "(3,5),(5,2),(2,1),(4,2),(4,1),(3,1)" 

>>> list(ast.literal_eval(s)) 
[(3, 5), (5, 2), (2, 1), (4, 2), (4, 1), (3, 1)] 

Hier zu bekommen, ist ein SO link-eval vs ast.literal_eval

+0

Ich tat dies und ich bekomme: [((3, 5), (5, 2), (2, 1), (4, 2), (4, 1), (3, 1))]. Warum gibt es extra()? – user3624406

+0

Besser zu verwenden ['ast.literal_eval()'] (https://docs.python.org/2/library/ast.html#ast.literal_eval). Die Ausgabe für diese Zeichenfolge ist die gleiche, aber 'ast.literal_eval()' wird die Schlüssel für den Prozess tatsächlich nicht an eine Ecke ausgeben, wie es 'eval()' tut. –

+0

@ user3624406: klingt wie du '[eval (s)]' stattdessen. –

0

Gelöst es durch diesen Code, Liste der Tupel! :

with open('partial.txt') as f: 
graph = [tuple(map(int, i.split(','))) for i in f] 

print (graph) 
Verwandte Themen