【问题标题】:creating flat list from two lists从两个列表创建平面列表
【发布时间】:2012-06-12 12:39:12
【问题描述】:

给定一个值列表:

data = [100, 80, 200, 20, 300, 100, 400, 40, 500, 120, 600, 60]

我想提取前两个和后两个值,并创建一个新列表。不幸的是,按照我现在做事的方式,我得到了一个包含两个列表的列表:

bla = [data[0:2], data[-2:]]

print bla
 [[100, 80], [600, 60]]

相反,我想得到这个:

[100, 80, 600, 60]

有没有简单的方法来做到这一点?

(这个问题和this question有点关系,但我觉得还是够不一样的)

【问题讨论】:

    标签: python


    【解决方案1】:

    使用+ 的列表连接:

    data[0:2] + data[-2:]
    

    【讨论】:

    • 前导0是不必要的:data[:2] + data[-2:]
    【解决方案2】:

    使用+ 连接两个子列表:

    bla = data[:2] + data[-2:]
    
    bla
    [100, 80, 600, 60]
    

    【讨论】:

      【解决方案3】:

      使用这个:

      bla = data[0:2] + data[-2:]
      print bla
      [100, 80, 600, 60]
      

      【讨论】:

        【解决方案4】:

        组合多个迭代器的另一种方法是使用itertools.chain 创建一个迭代器:

        import itertools
        extractediter = itertools.chain(data[0:2], data[-2:])
        

        迭代器本身不会创建新列表,但会为您提供一个结构,您可以像处理列表一样遍历:

        for x in extractediter:
            print x
        

        或计算总和:

        extractedtotal = sum(extractediter)
        

        如果您正在创建大型列表或子列表,这可能是一个优势,因为迭代器不会复制,只是一个移动的占位符,您一次访问每个列表项。缺点是迭代器就像生成器表达式,你只能遍历它们一次,然后它们被称为“消耗”。

        如果您真的只是想要另一个列表,请将其传递给 list 类型构造函数

        extractedlist = list(extractediter)
        

        【讨论】:

          【解决方案5】:
          newdata = []
          newdata.extend(data[:2])
          newdata.extend(data[-2:])
          

          【讨论】:

            猜你喜欢
            • 2020-04-12
            • 2014-06-29
            • 2022-12-08
            • 1970-01-01
            • 1970-01-01
            • 2022-06-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多