从两个列表创建平面列表

时间:2012-06-12 12:39:13

标签: python

给出一系列值:

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有些相关,但我仍然觉得它有点不同)

5 个答案:

答案 0 :(得分:7)

将列表并置与+

一起使用
data[0:2] + data[-2:]

答案 1 :(得分:5)

使用+连接两个子列表:

bla = data[:2] + data[-2:]

bla
[100, 80, 600, 60]

答案 2 :(得分:3)

使用此:

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

答案 3 :(得分:2)

组合多个迭代的另一种方法是使用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)

答案 4 :(得分:0)

newdata = []
newdata.extend(data[:2])
newdata.extend(data[-2:])