Разбить строку, находящуюся внутри списка, на два элемента, которые остаются в одном списке - PullRequest
0 голосов
/ 19 мая 2018

Это цепочка чисел внутри текстового файла, который я импортирую и хочу преобразовать в определенный список.

3 04,24
4 04,75
4 05,11
4 05,47
4 05,78
4 06,80
3 07,25
3 07,92
3 08,23
2 09,76

На самом деле с моим кодом я достигаю этой точки:

[['3 04,24'], ['4 04,75'], ['4 05,11'], ['4 05,47'], ['4 05,78'], ['4 06,80'], ['3 07,25'], ['3 07,92'], ['3 08,23'], ['2 09,76']]

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

[['3','04,24'], ['4','04,75']] etc...

Но после многих исследований я не могу найти решение, даже если бы вы могли сказать мне, как конвертироватьэти элементы от строки до int, которые были бы очень полезны!

Вот мой код:

with open("myfile.txt") as f:
    mylist = [line.rstrip('\n') for line in f]
    mylist = [mylist[x:x+1] for x in range(0, len(mylist), 1)]
    print(mylist)

Спасибо.

Ответы [ 4 ]

0 голосов
/ 19 мая 2018

простое решение выглядит следующим образом

with open(file,'r') as f:
    print([each.split() for each in f])
0 голосов
/ 19 мая 2018

Используйте список-понимание:

>>> lst = [['3 04.24'], ['4 04.75'], ['4 05.11'], ['4 05.47'], ['4 05.78'], ['4 06.80'], ['3 07.25'], ['3 07.92'], ['3 08.23'], ['2 09.76']]
>>> [x[0].split() for x in lst]

Выходы:

[['3', '04.24'], 
 ['4', '04.75'], 
 ['4', '05.11'], 
 ['4', '05.47'], 
 ['4', '05.78'], 
 ['4', '06.80'], 
 ['3', '07.25'], 
 ['3', '07.92'], 
 ['3', '08.23'], 
 ['2', '09.76']]            

Чтобы преобразовать строку в целое число:

[[int(i) if not '.' in i else float(i) for i in x[0].split()] for x in lst]
0 голосов
/ 19 мая 2018

Используйте метод str.split():

with open("myfile.txt") as f:
    mylist = [line.rstrip('\n') for line in f]
    my_structured_list = [line.split(" ") for line in mylist]

    print(my_structured_list)

Во второй части вашего вопроса о преобразовании элементов в int вы можете снова использовать str.split() и преобразовать полученные элементы в int:

with open("myfile.txt") as f:
    mylist = [line.rstrip('\n') for line in f]
    my_structured_list = [line.split(" ") for line in mylist]

    my_structured_int_list = []
    for line_tuple in my_structured_list:
        input_first_element = line_tuple[0]
        input_second_element, input_third_element = line_tuple[1].split(",")

        output_first_half = int(input_first_element)
        output_second_half = int(input_second_element), int(input_third_element)

        my_structured_int_list.append((output_first_half, output_second_half))

    print(my_structured_int_list)
0 голосов
/ 19 мая 2018

Это одно решение с использованием модуля csv из стандартной библиотеки:

import csv

with open('myfile.txt', 'r') as f:
    reader = csv.reader(f, delimiter=' ')
    res = list(reader)

Пример с вашими данными: -

from io import StringIO
import csv

mystr = StringIO("""3 04,24
4 04,75
4 05,11
4 05,47
4 05,78
4 06,80
3 07,25
3 07,92
3 08,23
2 09,76""")

with mystr as f:
    reader = csv.reader(f, delimiter=' ')
    res = list(reader)

print(res)

# [['3', '04,24'],
#  ['4', '04,75'],
#  ['4', '05,11'],
#  ['4', '05,47'],
#  ['4', '05,78'],
#  ['4', '06,80'],
#  ['3', '07,25'],
#  ['3', '07,92'],
#  ['3', '08,23'],
#  ['2', '09,76']]

Или если вам нужно преобразовать данные в числовые:

with mystr as f:
    reader = csv.reader(f, delimiter=' ')
    res = [[int(i), float(j.replace(',', '.'))] for i, j in reader]

print(res)

[[3, 4.24],
 [4, 4.75],
 [4, 5.11],
 ...
...