【问题标题】:convert a list containing sublist and tuples into a flat list将包含子列表和元组的列表转换为平面列表
【发布时间】:2016-12-13 07:12:23
【问题描述】:

'a = [1,2,[12,5,(6,7,9)],[34,56]] lambda l: [子列表中的子列表项]

ab = lambda a: [子列表中的子列表项]

打印(ab(a))'

我想要这样的输出 [1,2,12,5,6,7,9,34,56]

【问题讨论】:

    标签: python-2.7 python-3.x lambda


    【解决方案1】:

    享受:

    def convert(lst):
        if all(not isinstance(e, (list, tuple)) for e in lst):
            return lst[:]
        else:
            result = []
            for e in lst:
                if isinstance(e, (list, tuple)):
                    converted = convert(e)
                    result.extend(converted)
                else:
                    result.append(e)
            return result
    

    【讨论】:

    • 谢谢你的回答..但我发布了一些其他版本来解决......请给你的cmets.....
    • 你在哪里发的?
    【解决方案2】:

    我将其视为文本处理工作。首先将传入列表转换为字符串表示形式,然后将字符串拆分为每个包含一个元素的小部分,最后我使用一个空列表接收这些新鲜元素。这是我的代码片段:

    def simpleL(complexL):
        a =repr(complexL).split(',')
        c=[]
        for i in a:
            element =i.strip('[()] ')
            if element.isdigit():
                c.append(int(element))
        return c
    

    【讨论】:

      【解决方案3】:
      output = []
      def uni_lst(lst):
          if type(lst) in [list, tuple]:
              for x in lst:
                  if type(x) in [list, tuple]:
                      uni_lst(x)
                  else:
                      output.append(x)
          return output
      

      以上代码将从任何类型的列表或元组中创建一个列表。

      【讨论】:

      • 据我所知,它有效,但我发现有一些缺点。首先,最好使用isinstance 内置函数检查实例:isinstance(lst, (list, tuple)) 而不是type(x) in [list, tuple](详见 PEP8:python.org/dev/peps/pep-0008)。另一个缺点是使用了全局对象output,一个好的函数必须在里面做所有的操作。
      猜你喜欢
      • 2012-05-24
      • 2012-09-03
      • 2018-06-15
      • 2018-12-19
      • 2012-04-24
      • 2012-06-05
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      相关资源
      最近更新 更多