2015-02-11 3 views
1

У меня есть этот список номеров в файле журнала:Как выбрать элемент кортежа в списке?

[(1, 1)] 
[(11, 11)] 
[(157, 208)] 
[(222, 224)] 
[(239, 239)] 
[(265, 268)] 

и я хочу, чтобы напечатать элементы, как значение переменной, например так:

x = 1 
y = 1 

, а затем: вернуться к следующей строке

x= 11 
y = 11 

возвращение:

x=157 
y=208 

Возможно?

Мой КОДА были:

fhand=open('list.log') 
    for lines in fhand: 
    print lines 
    print (lines[1:1]) 

И

import re 
fhand=open('list.log') 
for line in fhand: 
    line=line.split() 
    number=map(lambda line: line.split()[0], line) 
    print number 

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

ответ

2

Вы можете использовать ast.literal_eval, распаковать каждый элемент с доступом кортежа, хранящийся внутри каждый список и печати с помощью str.format:

from ast import literal_eval 
with open('list.log') as f: 
    for line in f: 
     a,b = literal_eval(line.rstrip())[0] 
     print("x = {}\ny = {}".format(a,b)) 
x = 1 
y = 1 
x = 11 
y = 11 
x = 157 
y = 208 
x = 222 
y = 224 
x = 239 
y = 239 
x = 265 
y = 268 

Если вы хотите сохранить список всех кортежей:

tups = [literal_eval(line.rstrip())[0] for line in f] 
print(tups) 
[(1, 1), (11, 11), (157, 208), (222, 224), (239, 239), (265, 268)] 

ast.literal_eval :

Безопасная оценка узла выражения или кодированной строки Unicode или Latin-1 c получение литерального или контейнерного дисплея Python. Представленная строка или узел могут состоять только из следующих литеральных структур Python: строк, чисел, кортежей, списков, dicts, booleans и None.

делать это вручную, вы должны были бы индексом 2: -2 после удаления символа новой строки, разделить на , и map в целое:

for line in f: 
    a,b =(map(int,line.rstrip()[2:-2].split(","))) 
    print("x = {}\ny = {}".format(a,b)) 

Или используйте str.translate удалить запятые, круглые скобки и т.д. .:

with open('list.log') as f: 
     for line in f: 
     a,b = map(int,line.translate(None,"()[],").split()) 
     print("x = {}\ny = {}".format(a,b)) 
+0

Почему мой код разделяет только два из четырех символов? –

+0

@MalikBrahimi, потому что вы забываете новую строку, 'parse = line.strip ('() [] \ n'). Split (',')' –

+0

Это тоже не сработало. Он фактически переключается на другие два символа. –

1
with open('list.log') as log: 
    for line in log: 
     parse = line.strip('()[]\n').split(',') 
     print 'x = %s' % parse[0] 
     print 'y = %s' % parse[1] 
0

Как об этом:

for line in fhand: 
    line = line.strip(); # trim off any leading or extra whitespace including newline 
    line = line[2:-2] # trim off the leading [(and trailing)] chars 
    parsed_line = line.split(',') # convert to list 
    print('x =',parsed_line[0].strip()) 
    print('y =',parsed_line[1].strip()) 
+0

, что у вас будет дополнительный') 'вам нужно разделить новую строку перед индексированием –

+0

@PadraicCunningham - хороший улов. Исправлена. – selbie

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