【问题标题】:How to combine list of lists with list of strings如何将列表列表与字符串列表结合起来
【发布时间】:2019-10-01 18:19:29
【问题描述】:

我在下面有一个列表

a = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]

我有两个字符串列表,想按顺序将它们附加到上面的列表中以形成一个新列表。

id = ['pid=1882','pid=1086','pid=180']

lgt = ['38.72347',
 '38.23833',
 '37.64986']

结果应该变成

new_list = [['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'], 
['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'], 
['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]

我尝试了 zip 方法,但输出是一个元组而不是一个列表。

new_list = list(zip(a, id, lgt))

new_list -> [[['1321.', 'Fuji', 'Kto', '776'], 'pid=1882', '38.72347'], 
[['3123.', 'dake', 'Cu', '392'], 'pid=1086', '38.23833'], 
[['123.', 'Hota', 'Cu', '310'], 'pid=180', '37.64986']]]

谢谢!

【问题讨论】:

    标签: python python-3.x list


    【解决方案1】:

    你可以使用zip,但是你需要在之后解包列表元素。

    a = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]
    ids = ['pid=1882', 'pid=1086', 'pid=180']
    lgt = ['38.72347', '38.23833', '37.64986']
    
    result = [[*x, y, z] for x, y, z in zip(a, ids, lgt)]
    print(result)
    # [['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'], ['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'], ['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]
    

    【讨论】:

      【解决方案2】:

      通过压缩三个列表生成的元组,您可以使用迭代器解包将来自idslgt 的项目分配到一个列表中,以与来自a 的列表项目连接:

      [s + r for s, *r in zip(a, ids, lgt)]
      

      这会返回:

      [['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'],
       ['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'],
       ['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]
      

      【讨论】:

        【解决方案3】:

        您可以使用以下解决方案:

        list(zip(*zip(*a), id, lgt))
        

        结果:

        [('1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'),
         ('3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'),
         ('123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986')]
        

        如果您需要列表列表:

        list(map(list, zip(*zip(*a), id, lgt)))
        

        【讨论】:

        • 不错的技巧,但结果是错误的。你得到一个列表中的所有数字,另一个列表中的所有名称,等等。
        【解决方案4】:

        看看这个:

        list = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]
        id = ['pid=1882','pid=1086','pid=180']
        lgt = ['38.72347','38.23833','37.64986']
        
        for index, value in enumerate(list):
            list[index].append(id[index])
            list[index].append(lgt[index])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-08
          • 2018-09-08
          • 1970-01-01
          • 2019-05-18
          • 1970-01-01
          • 1970-01-01
          • 2020-03-29
          相关资源
          最近更新 更多