0

给定一个值列表:

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与this question有些相关,但我仍然认为它足够不同)

4

5 回答 5

7

使用列表连接+

data[0:2] + data[-2:]
于 2012-06-12T12:40:13.427 回答
5

用于+连接两个子列表:

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

bla
[100, 80, 600, 60]
于 2012-06-12T12:40:34.327 回答
3

用这个:

bla = data[0:2] + data[-2:]
print bla
[100, 80, 600, 60]
于 2012-06-12T12:40:24.530 回答
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)
于 2012-06-12T12:54:12.807 回答
0
newdata = []
newdata.extend(data[:2])
newdata.extend(data[-2:])
于 2012-06-12T12:45:46.583 回答