Чтение файла как списка кортежей кортежей

#python #list #tuples #readfile

#python #Список #кортежи #readfile

Вопрос:

Я хочу прочитать текстовый файл с помощью Python. Мой список должен быть таким:

     mylist = [((5., 10.), (6.4, 13)),
              ((7., 11.), (5.6, 5.)),
              ((4., 5.67), (3.1, 2.)),
              ((13., 99.), (3.2, 1.1))]
  

Мой текстовый файл:

     text file: 5., 10., 6.4, 13.
               7., 11., 5.6, 5.
               4., 5.67, 3.1, 2.
               13., 99., 3.2, 1.1
  

код python:

     with open('test.txt') as f:
      mylist = [tuple((tuple(map(float, i.split(','))))) for i in f]
    print(mylist)
  

Мой результат:

     [(5.0, 10.0, 6.4, 13.0), (7.0, 11.0, 5.6, 5.0), (4.0, 5.67, 3.1, 2.0), (13.0, 99.0, 3.2, 1.1)]
  

Большое вам спасибо

Ответ №1:

Вы можете сделать еще один шаг вперед:

 lst = [(5.0, 10.0, 6.4, 13.0), (7.0, 11.0, 5.6, 5.0), (4.0, 5.67, 3.1, 2.0), (13.0, 99.0, 3.2, 1.1)]
lst2 = [(tt[:2],tt[2:]) for tt in lst]

print(lst2)
  

Вывод

 [((5.0, 10.0), (6.4, 13.0)), ((7.0, 11.0), (5.6, 5.0)), ((4.0, 5.67), (3.1, 2.0)), ((13.0, 99.0), (3.2, 1.1))]
  

Ответ №2:

Вам нужно разделить строки на два отдельных кортежа. Изменение mylist на это будет работать:

 mylist = [tuple([tuple(s[:2]), tuple(s[2:])]) 
    for s in [list(map(float, i.split(",")))
    for i in f]]
  

Комментарии:

1. Я пытаюсь это сделать, но в моем выводе есть проблема:[((‘5.’, ‘ 10.’), (‘ 6.4’, ‘ 13. n’)), ((‘7.’, ‘ 11.’), (‘ 5.6’, ‘ 5.n’)), ((‘4.’, ‘ 5.67’), (‘ 3.1’, ‘ 2. n’)), ((’13.’, ‘ 99.’), (‘ 3.2’, ‘ 1.1’))]

2. Это несовместимо с выводом, который вы опубликовали ранее. Пожалуйста, устраните несоответствие.

3. кто-то пропустил преобразование с плавающей запятой — добавил это сейчас

4. Спасибо за вашу помощь, но я не знаю, почему возникла эта ошибка: для s в [map(float, i.split(«,»)) TypeError: объект ‘map’ не подлежит подписке

5. ах, в python3 вам нужно обернуть map list вызовом, поскольку он возвращает итератор — снова обновляется