代码之家  ›  专栏  ›  技术社区  ›  Javiss

在python中构建不同大小的字符串列表结构

  •  3
  • Javiss  · 技术社区  · 6 年前

    什么样的数据结构用于构建不同大小字符串列表的连接?

    例如。,

    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']
                   ]
    

    然后用“null”字符串填充以在每个列表中获得相同的大小:

     my_structure = [    ['h','i','null','null','null'],
                         ['t','h','e','r','e'],
                         ['fr', 'ie','nd','null', 'null']
                       ]
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   sacuL    6 年前

    你可以用 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')
    
        2
  •  2
  •   jpp    6 年前

    这里有一种使用列表理解的方法。它包括计算列表的最大长度作为初始步骤:

    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']]