【问题标题】:python merging list within listspython在列表中合并列表
【发布时间】:2014-03-17 00:34:41
【问题描述】:

我对 python 很陌生。但是,我正在尝试将数据列表列表或列表与列表内的元素合并。无论如何,本质上它看起来像这样......

示例:

data_list = ["x, cat, x, 8, ["10"]"]

我希望它看起来像这样......

data_list = ["x, cat, x, 8, 10"]

我尝试创建一个新列表并将其 .append() 附加到该列表,但结果似乎没有任何不同。 itertools 将每个项目分解成一个用逗号分隔的字符串。

使用 reduce(lambda x,y: x+y,data_list) 只删除外括号 所以打印到外壳时看起来像这样:

data_list = x, cat, x, 8, ["10"]

有没有办法可以使用 lambda 删除内括号?或任何给我相同结果的方法?

【问题讨论】:

  • 非常感谢 merlin2011 和 user3!!!!

标签: python string list lambda merge


【解决方案1】:

使用替换、连接和映射:

print ["".join(map(lambda x: x.replace('[','').replace(']','').replace('"',''), ''.join(data_list).split()))]

输出:

["x,cat,x,8,10"]

【讨论】:

    【解决方案2】:

    看起来您正试图用一些元素是列表的元素和一些不是列表的元素来展平一个列表。假设您的嵌套列表只有一个元素,以下内容可以满足您的需求。

    data_list = ["x", "cat", "x", 8, ["10"]]
    
    def Strip(x):
       if isinstance(x, list):
         return x[0]
       return x
    
    newlist = [Strip(x) for x in data_list]
    
    print newlist
    

    这是另一个可能更易读的解决方案,它可以处理具有多个元素的嵌套列表,但不能处理多层嵌套。

    data_list = ["x", "cat", "x", 8, ["10",10]]
    
    new_list = []
    for x in data_list:
      if isinstance(x,list):
        new_list += x
      else:
        new_list.append(x)
    
    print new_list
    

    如果我们假设 data_list 以包含单个 string 而不是 list 对象的列表开始,我们可以在使用上述方法之前先将其转换为列表。

    import ast
    data_list = ast.literal_eval(data_list[0])
    

    完成后将其转换回来:

    new_list = [new_list.__str__()]
    

    【讨论】:

    • 我认为,您必须将 data_list 的内容视为字符串而不是列表元素。
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2016-06-23
    • 2014-05-16
    • 2010-11-11
    相关资源
    最近更新 更多