Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2016 11:04:56

OKTA
Зарегистрирован: 2016-07-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Составить правильный генератор списка

Товарищи! Приветствую! Подскажите пожалуйста, как переписать следующий кусок программы правильно?

Это работает:

rawbytes = bytearray("b", "utf-8")
    for i in command:
        if isinstance(i, int):
            rawbytes.append(i)
        else:
            for j in i:
                rawbytes.append(j)

Пытаюсь переделать, но не выходит:
rawbytes = [(i if isinstance(i, int) else j for j in list(i)) for i in command]

А все, что хочу сделать, это список превратить в bytearray, но в списке могут быть вложенные списки, например: [1, 2, 3, , 9, 10]

Офлайн

#2 Июль 13, 2016 13:33:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Составить правильный генератор списка

Лучше разделить код на преобразование списка в плоский вид и преобразование плоского списка в bytearray().

Получится

bytearray(flatten(command))



Офлайн

#3 Июль 13, 2016 15:24:36

OKTA
Зарегистрирован: 2016-07-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Составить правильный генератор списка

py.user.next
Лучше разделить код на преобразование списка в плоский вид и преобразование плоского списка в bytearray().Получится

В этом и был в принципе главный вопрос - как получить плоский вид списка. Ничего стандартного для этого найти не удалось.

Офлайн

#4 Июль 13, 2016 15:46:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9874
Репутация: +  854  -
Профиль   Отправить e-mail  

Составить правильный генератор списка

 >>> def flatten(seq):
...     for i in seq:
...         if hasattr(i, '__getitem__'):
...             for j in flatten(i):
...                 yield j
...         else:
...             yield i
... 
>>> lst = [1, 2, 3, [4, 5, [6, 7, [8]]] , 9, 10]
>>> 
>>> bytearray(flatten(lst))            
bytearray(b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n')
>>>


tags: flatten



Отредактировано py.user.next (Ноя. 30, 2020 13:43:21)

Офлайн

#5 Июль 13, 2016 18:39:34

OKTA
Зарегистрирован: 2016-07-13
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Составить правильный генератор списка

О, даже так! Спасибо большое! Буду пробовать!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version