首页 文章

如何将多个列表与空元素合并[暂停]

提问于
浏览
-5

我想合并三个列表,每个列表都有空元素 .

有三个列表:

list1 = ['','',1,2]
list2 = [3,'','','']
list3 = ['',4,'','']

这是我的预期结果:

Merged_list = [3,4,1,2]

7 回答

  • 0

    您可以使用求和操作合并列表(“”,例如:[1,2] [3,4] => [1,2,3,4]),您可以使用过滤器删除空值或无值 . 在你的问题中,它看起来你保证在多个列表中在同一个索引中没有值 . 所以你可以合并它们然后过滤它们,它会得到结果但是 .

    a = ['', '', 1, 2]
    b = [3, '', '', '']
    c = ['', 4, '', '']
    z = a + b + c
    z = [n for n in z if n is not '']
    
  • -2

    假设每个索引有 exactly one'' 元素,您可以发出以下命令:

    >>> list1 = ['','',1,2]
    >>> list2 = [3,'','','']
    >>> list3 = ['',4,'','']
    >>> 
    >>> lists = [list1, list2, list3]
    >>> [next(x for x in col if x != '') for col in zip(*lists)]
    [3, 4, 1, 2]
    

    如果假设不成立,则需要澄清问题 .

    zip(*iterables)是转置迭代集合的常用习惯用法 .
    next (x for x in col if x != '') 从每个"column"获取第一个非 '' 元素 .

  • 0

    你可以通过列表理解合并它们,然后过滤出 '' ;

    list1 = ['','',1,2]
    list2 = [3,'','','']
    list3 = ['',4,'','']
    
    merged_list = [ item for item in (list1+list2+list3) if item != '']
    
    print(merged_list) 
    
    # Will give you
    # [1, 2, 3, 4]
    

    或者正如您所提到的,您想将 list2list3 合并到 list1 ;

    list1 = ['','',1,2]
    list2 = [3,'','','']
    list3 = ['',4,'','']
    
    # Add list2 and list3 to list1
    list1.extend(list2)
    list1.extend(list3)
    
    # Filter out the '' from list1
    list1 = [ item for item in (list1) if item != '' ]
    
    # Print out results
    print(list1)
    
  • 0

    您可以使用 zip 执行此操作:

    List1 = ['','',1,2]
    List2 = [3,'','','']
    List3 = ['',4,'','']
    
    Merged_list = [elem for item in list(zip(List1,List2,List3)) for elem in item if not elem=='']
    print(Merged_list)
    

    结果:

    [3, 4, 1, 2]
    
  • 0
    temp_list = list1 + list2 + list3
    merged_list = []
    for i in xrange(temp_list):
         if temp_list[i] == “ “:
               merged_list.append(temp_list[i])
    
  • 0
    list1 = ['','',1,2]
    list2 = [3,'','','']
    list3 = ['',4,'','']
    
    
    merged_list = [element for l in list(zip(list1 ,list2,list3)) for element in l if element ]
    
  • 0

    第一个数组元素的优先级:

    from itertools import chain, zip_longest
    list(x[0] or '' if x[0] != '' else next(chain((x for x in x[1:] if x != ''), ('',))) for x in zip_longest(a, b, c))
    

相关问题