2017-01-02 13 views
0

У меня есть список номеров, как это (сохранено в файле .txt):Как я печатаю каждый второй элемент в списке, полном строк? Python

list_of_numbers = [ 
    ('5', 2.5, 5200), 
    ('6', 3.2, 5236), 
    ('8', 5.4, 5287), 
    ('6', 8.7, 2563) 
] 

И я импортировал этот список (список .txt файл), как это:

list_of_numbers = open("list_of_numbers.txt").read().strip().split() 

но теперь я хочу, чтобы питон напечатать меня каждый второй элемент в каждой строке .. Я попытался это:

p = x[1] for x in list_of_numbers 
print(p) 

, но это не правильно .. И я хочу, чтобы питон печататься меня, как это :

p = 2.5, 3.2, 5.4 

Пожалуйста, помогите мне ..

ответ

1

Вы пропустили скобки. Попробуйте это:

p = [x[1] for x in list_of_numbers] 

Для печати значения, вы могли бы использовать

print(', '.join([str(x) for x in p])) 

Кроме того, необходимо изменить способ загрузки данных из файла

Полный код:

def parse(raw): 
    data = [] 
    for line in raw.split("\n"): 
     line = line.strip() 
     # --> "('5', 2.5, 5200)" 
     if line.startswith("(") and line.endswith(")"): 
      d = line[line.index("(")+1 : line.index(")", -1)] 
      # --> "'5', 2.5, 5200" 
      d = d.split(",") 
      data.append([]) 
      for i in d: 
       i = i.strip() 
       try: 
        i = float(i) 
       except: 
        pass 
       data[-1].append(i) 
    return data 


raw = open("list_of_numbers.txt").read() 

list_of_numbers = parse(raw) 

p = [x[1] for x in list_of_numbers] 
# --> [2.5, 3.2, 5.4, 8.7] 
print(', '.join([str(x) for x in p])) 
# ---> 2.5, 3.2, 5.4, 8.7 

Предлагаю использовать pickle. Сохранение и загрузка данных легко, как:

import pickle 
data = ... 
# store 
file = open('data.txt', 'w') 
pickle.dump(data, file) 
file.close() 
# load 
file = open('data.txt', 'r') 
data = pickle.load(file) 
file.close() 
+0

Я пробовал это, но это не правильно .. Python говорит, что есть ошибка .. IndexError: индекс строки вне диапазона – Bababo

+0

Вышеупомянутый «полный код» работает для меня. – Philipp

+0

Можете ли вы изменить свой вопрос и указать, как выглядит ваш файл и как вы точно импортируете данные? – Philipp

0

Другой вариант заключается в использовании numpy.ndarray.

import numpy as np 
list_of_numbers = [ 
    ('5', 2.5, 5200), 
    ('6', 3.2, 5236), 
    ('8', 5.4, 5287), 
    ] 
list_of_numbers = np.array(list_of_numbers) 
p = list_of_numbers[:,1] 
print(p) 
# outputs: ['2.5' '3.2' '5.4'] 

Кроме того, поскольку вы читаете данные из текстового файла, ваш первый список должен содержать только str. (Я действительно не понимаю, как вы получаете смешанные строки и числа с помощью метода вы описываете в своем вопросе.) Для того, чтобы исправить это, вы можете:

  • использование numpy.loadtxt,
  • преобразовать в float при переключении ndarray: `np.array (list_of_numbers, dtype = float).

И наконец, я настоятельно рекомендую вам узнать о slices in Python.

+0

Спасибо за ваш ответ, но в моем питоне говорится, что нет модуля с именем numpy .. – Bababo

+0

Это потому, что это не основная библиотека, вам нужно установить ее самостоятельно. Вы легко найдете инструкции о том, как это сделать. –

+0

О, ладно. Спасибо за помощь. – Bababo