2010-10-24 106 views
0

我有一个Python列表Python列表操作

alist = [ [0, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8,13]], [ [3, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8,999] ] 

我需要的结果是

alist = [[0,4,8,13], [3, 4, 8, 999]] 

这意味着在每一个元素ALIST前两个和最后两个数字。

我需要一个快速的方法来做到这一点,因为列表可能很大。

+1

你在模拟什么奇怪的数据结构? – Daenyth 2010-10-24 02:06:08

+1

我敢打赌,这是作业。只有他们离开了[作业]标签。问这里比想更容易。 – 2010-10-24 03:29:23

回答

12
[x[0][:2] + x[-1][-2:] for x in alist] 
1

该对象实际上是一个元组,而不是一个列表。如果你期望它是可变的并且很难阅读,这可能会让你失望。考虑使用连字符\长线路:

alist = [ [0, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8,13]], [ [3, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8, 999] ] 

更清晰的

alist = [ [0, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8,13]], \ 
     [ [3, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8, 999] ] 

这也有助于你发现的双支架,使得这一个元组。对于列表:

alist = [ [0, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8,13], \ 
     [ [3, 4, 5, 5], [2, 2, 4, 5], [6, 7, 8, 999] ]] 

如果在哈维尔的答案不能满足您的速度要求建议列表中理解,考虑numpy的阵列。