построение структуры списков строк разного размера в python - PullRequest
0 голосов
/ 03 июля 2018

Какая структура данных используется для построения конкатенации списков строк разного размера?

Например,

a_list = ['h','i']
b_list = ['t','h','e','r','e']
c_list = ['fr', 'ie','nd']

желаемая структура:

my_structure = [ ['h','i'],
                 ['t','h','e','r','e'],
                 ['fr', 'ie','nd']
               ]

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

 my_structure = [    ['h','i','null','null','null'],
                     ['t','h','e','r','e'],
                     ['fr', 'ie','nd','null', 'null']
                   ]

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы можете использовать itertools.zip_longest:

import itertools

np.array(list(itertools.zip_longest(a_list, b_list, c_list, fillvalue='null'))).T

array([['h', 'i', 'null', 'null', 'null'],
      ['t', 'h', 'e', 'r', 'e'],
      ['fr', 'ie', 'nd', 'null', 'null']],
  dtype='<U4')

Редактировать : В соответствии с вашим комментарием о том, что вы хотите добавить новые списки в свой массив, вероятно, будет проще создать список списков, которые вы хотите использовать, и вы можете добавить в этот список несколько динамично:

a_list = ['h','i']
b_list = ['t','h','e','r','e']
c_list = ['fr', 'ie','nd']

my_list = [a_list, b_list, c_list]

my_arr = np.array(list(itertools.zip_longest(*my_list, fillvalue='null'))).T

>>> my_arr
array([['h', 'i', 'null', 'null', 'null'],
       ['t', 'h', 'e', 'r', 'e'],
       ['fr', 'ie', 'nd', 'null', 'null']],
      dtype='<U4')

Затем вы можете добавить новый список в my_list:

d_list = ['x']

my_list.append(d_list)

my_arr = np.array(list(itertools.zip_longest(*my_list, fillvalue='null'))).T

>>> my_arr
array([['h', 'i', 'null', 'null', 'null'],
       ['t', 'h', 'e', 'r', 'e'],
       ['fr', 'ie', 'nd', 'null', 'null'],
       ['x', 'null', 'null', 'null', 'null']],
      dtype='<U4')
0 голосов
/ 03 июля 2018

Вот один из способов использования списка. В качестве начального шага необходимо рассчитать максимальную длину ваших списков:

L = (a_list, b_list, c_list)
maxlen = max(map(len, L))

res = [i+['null']*(maxlen-len(i)) for i in L]

print(res)

[['h', 'i', 'null', 'null', 'null'],
 ['t', 'h', 'e', 'r', 'e'],
 ['fr', 'ie', 'nd', 'null', 'null']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...