给出一系列值:
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有些相关,但我仍然觉得它有点不同)
答案 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:])