【问题标题】:Splitting lists into to different lists将列表拆分为不同的列表
【发布时间】:2022-12-21 11:57:28
【问题描述】:

我有一个清单:

list =  [['X', 'Y'], 'A', 1, 2, 3]

我想分成:

new_list = [['X','A', 1, 2, 3] , ['Y', 'A', 1, 2, 3]]

这可能吗?

【问题讨论】:

    标签: python list


    【解决方案1】:

    我将建议一种使用可迭代解包的更简洁的方法——在我看来,它比使用列表切片更简洁。

    我们获取 lst 的第一个元素并将其与列表的其余部分分开。然后,我们使用列表理解为 lst 的原始子列表中的每个元素创建一个新列表:

    lst = [['X', 'Y'], 'A', 1, 2, 3]
    fst, *rest = lst
    
    [[elem, *rest] for elem in fst]
    

    这输出:

    [['X', 'A', 1, 2, 3], ['Y', 'A', 1, 2, 3]]
    

    【讨论】:

    • 同意,这比切片更干净。好的
    • 是的,那很干净,谢谢
    • 不过我有一个问题。如果我有一个列表,例如 [[['X', 'Y'], 'A', 1, 2, 3],[[Q', 'B'], 'A', 1, 2, 3]]。这种方法行得通吗?
    • @abh 是的,您会将上面的代码包装到另一个 for 循环或理解中。类似于[[elem, *rest] for elem, *rest in lst]
    • 我试过了,但并没有真正理解......你会怎么做呢? :)
    【解决方案2】:

    当然,去掉第一个元素来创建一个外层循环,然后遍历列表的其余部分来构建子列表:

    lst = [['X', 'Y'], 'A', 1, 2, 3]
    
    new_list = []
    
    for item in lst[0]:
        sub = [item]
        for sub_item in lst[1:]:
            sub.append(sub_item)
        new_list.append(sub)
    

    或者,作为一种理解:

    new_list = [[item, *lst[1:]] for item in lst[0]]
    

    *lst[1:] 会将切片解压到新创建的列表中。

    借用命令式 for 循环的想法:

    new_list = []
    
    for item in lst[0]:
        sub = [item, *lst[1:]]
        new_list.append(sub)
    

    【讨论】:

      【解决方案3】:

      这可能不是最好的方法,但它有效

      l = [['X', 'Y'], 'A', 1, 2, 3]
      
      new_list = []
      to_append = []
      for item in l:
          if isinstance(item, list):
              new_list.append(item)
              continue
      
          to_append.append(item)
      
      new_list.append(to_append)
      print(new_list)
      

      【讨论】:

        【解决方案4】:

        是的,下面的代码返回的正是您想要的。

        list =  [['X', 'Y'], 'A', 1, 2, 3]
        new_list = []
        
        for i, item in enumerate(list[0]):
            new_list.append([item] + list[1:])
        
        print(new_list)
        

        【讨论】:

          猜你喜欢
          • 2021-12-02
          • 2014-03-14
          • 1970-01-01
          • 1970-01-01
          • 2018-12-08
          • 1970-01-01
          • 2020-06-02
          • 1970-01-01
          相关资源
          最近更新 更多