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

将列表和字符串列成平面列表

  •  1
  • JamesHudson81  · 技术社区  · 7 年前

    我有以下几点 lista

    ['IBERDROLA', 'ACCOR\xa0SA', ['ADMIRAL'], ['ADECCO', 'IAG']]
    

    flat_list 使用此输出:

    ['IBERDROLA', 'ACCOR\xa0SA', 'ADMIRAL', 'ADECCO', 'IAG']
    

    可能我没有使用正确的关键字来找到想要的答案,买我只找到 Making a flat list out of list of lists in Python (没有 str 平面列表 其输出如下:

    flat_list = [item for sublist in lista for item in sublist] 
    
    ['I', 'B', 'E', 'R', 'D', 'R', 'O', 'L', 'A', 'A', 'C', 'C', 'O', 'R', '\xa0', 'S', 'A', 'ADMIRAL', 'ADECCO', 'IAG']
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   blhsing    7 年前

    假设您的列表存储为变量 l isinstance 作为条件:

    [i for s in l for i in (s if isinstance(s, list) else (s,))]
    
        2
  •  2
  •   Eugene Yarmash    7 年前

    你可以用 isinstance() 用于检查列表项类型的函数:

    lista = ['IBERDROLA', 'ACCOR\xa0SA', ['ADMIRAL'], ['ADECCO', 'IAG']]
    flat_list = []
    
    for item in lista:
        if isinstance(item, list):
            flat_list.extend(item)
        else:
            flat_list.append(item)
    
        3
  •  0
  •   Narendra Lucky    7 年前
       lst = ['IBERDROLA', 'ACCOR\xa0SA', ['ADMIRAL'], ['ADECCO', 'IAG']]
       new_lst = reduce(lambda x,y:x+y,[val if isinstance(val,list) else [val] for val in lst])
       print new_lst
    
       Result : ['IBERDROLA', 'ACCOR\xa0SA', 'ADMIRAL', 'ADECCO', 'IAG']
    
    推荐文章