Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 8, 2017 12:15:44

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Добрый день.
Принт выводит вот такой список:

 [[6:08:34, выход, Фамилия Имя Отчество, 01.08.2017],
[6:13:50, выход, Фамилия Имя Отчество, 01.08.2017],
[6:16:35, вход, Фамилия Имя Отчество, 01.08.2017],
[6:45:23, вход, Фамилия Имя Отчество, 01.08.2017],
[6:45:45, выход, Фамилия Имя Отчество, 01.08.2017]]
Хочу вывести первый элемент массива:
 print (s[0])
Выводит только скобку [
Пишу:
 print (s[1])
Эта же скобка.



Отредактировано Ubhra (Сен. 8, 2017 12:17:12)

Офлайн

#2 Сен. 8, 2017 12:19:34

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

 print('''[[
hello!!!
]]''')

Офлайн

#3 Сен. 8, 2017 12:22:08

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Ubhra
Добрый день.Принт выводит вот такой список:
 repr(s)

Офлайн

#4 Сен. 8, 2017 12:31:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Ubhra
У вас нет списка, у вас строка.
Сделайте

 print(type(s))
и убедитесь в этом сами



Офлайн

#5 Сен. 8, 2017 13:05:55

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Пишет <class ‘str’>

А как строку преобразовать?



Отредактировано Ubhra (Сен. 8, 2017 13:06:30)

Офлайн

#6 Сен. 8, 2017 13:27:23

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

можно тупо вот так:

 [e.replace('[', '').replace(']','').split(', ') for e in s.strip().replace('\n', '').split('],')]
но работать будет только для так (и только так) отфортматированных строк, что то универсальное писать нужно исходя из задачи.
ps. а вместо реплейсов использовать транслейт

Отредактировано Slow (Сен. 8, 2017 13:29:47)

Офлайн

#7 Сен. 8, 2017 13:37:09

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Я убирал переносы строк, получалось на вывод такое:

 [[6:08:34, выход, Фамилия Имя Отчество, 01.08.2017], [6:13:50, выход, Фамилия Имя Отчество, 01.08.2017], [6:16:35, вход, Фамилия Имя Отчество, 01.08.2017], [6:45:23, вход, Фамилия Имя Отчествоч, 01.08.2017], [6:45:45, выход, Фамилия Имя Отчество, 01.08.2017]]
Но опять же видит как строку.

Это ведь и есть запись массива?
 s = [[1, 2, 3], [a, b, c]]
Почему оно тогда не читается как массив?



Отредактировано Ubhra (Сен. 8, 2017 13:39:18)

Офлайн

#8 Сен. 8, 2017 13:41:52

Slow
Зарегистрирован: 2017-07-26
Сообщения: 88
Репутация: +  4  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Ubhra
Почему оно тогда не читается как массив?
потому что питон умный и многое делает за вас
в частности, когда вы пытаетесь вывести на печать что-либо, он лукапит методы __str__ и __repr__ (за порядок не ручаюсь, плохо помню), вызывает их для получения, кхм, человеколюбивого представления. И на массивах (в данном случае - list) что-то из этого имеется

Офлайн

#9 Сен. 8, 2017 14:50:37

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Объясните пожалуйста на примере почему так.

Файл test.txt

 [['a', 'b', 'c'], ['d', 'e', 'f']]
 def p():
    in = open('test.txt', 'r')
    s = in.read()
    print (s[1])
    in.close()
 >>>
[



Офлайн

#10 Сен. 8, 2017 15:08:34

Vintets
Зарегистрирован: 2016-07-05
Сообщения: 41
Репутация: +  6  -
Профиль   Отправить e-mail  

Не получается преобразовать список в многомерный массив

Ubhra
Объясните пожалуйста на примере почему так.
Потому, что в txt файле нет списков, там только строки. И читаешь ты строки. Потом можешь перевести в список.

Дам вредный совет, но самый простой:
s = eval(in.read())

Для 2 питона. Не знаю в 3-м его не порезали.

А так, смотря кто и зачем так пишет в файл. Если туда пишет другая программа или руками это одно.
Если пишет эта же программа или другая на питоне, можно использовать модуль Pickle. Можно законсервировать и расконсервировать любой объект питона, не только списки и словари. Можно и функции и классы.
Но это подойдёт если файл не будет читаться человеком или другой прогой.

Отредактировано Vintets (Сен. 8, 2017 15:13:03)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version