Как напечатать каждый второй элемент в списке, полном строк? питон
У меня есть список чисел, как это (сохраненный в файле.txt):
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()
но теперь я хочу, чтобы python выводил мне каждый второй элемент в каждой строке.. Я попробовал это:
p = x[1] for x in list_of_numbers
print(p)
но это не правильно.. И я хочу, чтобы питон напечатал меня так:
p = 2.5, 3.2, 5.4
Пожалуйста, помогите мне..
2 ответа
Вы пропустили скобки. Попробуй это:
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
Я предлагаю использовать рассол. Хранить и загружать ваши данные легко, как:
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()
Другой вариант заключается в использовании 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).
Наконец, я настоятельно рекомендую вам узнать о срезах в Python.