Найти - Пользователи
Полная версия: Составить правильный генератор списка
Начало » Python для новичков » Составить правильный генератор списка
1
OKTA
Товарищи! Приветствую! Подскажите пожалуйста, как переписать следующий кусок программы правильно?

Это работает:
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]
py.user.next
Лучше разделить код на преобразование списка в плоский вид и преобразование плоского списка в bytearray().

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

В этом и был в принципе главный вопрос - как получить плоский вид списка. Ничего стандартного для этого найти не удалось.
py.user.next
 >>> 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
OKTA
О, даже так! Спасибо большое! Буду пробовать!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB