Как напечатать каждый второй элемент в списке, полном строк? питон

У меня есть список чисел, как это (сохраненный в файле.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.

Другие вопросы по тегам