2013-02-25 29 views
1

目前我有以下列表:Python:如何获得列表中的某些内容?

>>> a = list() 
>>> b = [1, 2, 3] 
>>> c = [4,5,6] 
>>> d = [7, 8] 
>>> a.append(b) 
>>> a.append(c) 
>>> a.append(d) 
>>> del b, c, d 
>>> print a 
[[1, 2, 3], [4, 5, 6], [7, 8]] 
  1. 欲获得关于b,c和d中的第一项(值1,4和7)。我怎么能在一行代码中做到这一点?
  2. 我想获得b,c和d上的剩余项目(值2,3,5,6和8)。我怎么能在一行代码中做到这一点?
+4

类似'zip(b,c)[0]'或者zip(* a)[0]'? – 2013-02-25 10:42:39

+0

拉链完美无瑕。谢谢 – Winston 2013-02-25 10:49:25

+0

但是第二个呢?谢谢 – Winston 2013-02-25 11:03:13

回答

2
>>> zip(*a)[0] 
(1, 4) 

zip(*a)就像转置功能。

>>> zip(*a) 
[(1, 4), (2, 5), (3, 6)] 

[0]索引第一个元素。

>>> zip(*a)[0] 
(1, 4) 

第二个问题是棘手 - zip不会做的伎俩。相反,你需要一个列表理解。

>>> [i for l in a for i in l[1:]] 
[2, 3, 5, 6, 8] 

或者,如果你并不需要一个平坦的列表,简单地说:

>>> [l[1:] for l in a] 
[[2, 3], [5, 6], [8]] 
+0

zip完美地工作。谢谢 – Winston 2013-02-25 10:49:51

+0

但是第二个呢?我试过zip(* a)[1:]但它不起作用。谢谢 – Winston 2013-02-25 11:03:34

+0

@Winston查看编辑 – Volatility 2013-02-25 11:06:23

1

这应该做的伎俩:

[lst[0] for lst in a] 

它遍历一个和每个元素(这是一个列表),它收集的第一个值。

1

有很多方法可以做到这一点。这将是一个:

>>> print [x[0] for x in a] 
[1,4] 

或将打印内部的for循环:

>>> for x in a: print x[0], 
1 4 

最基本的方法,如果你只是想前两个子列表的第一要素:

>>> print a[0][0], a[1][0] 
1 4 
1

我会去由Niklas B.答案zip(b,c)[0],但是,给你更多的灵活性,如果你不”知道列表中的子列表的数量,你也可以尝试:

[el[0] for el in a] 

,让您在的子列表中的所有项目第一。

+2

这基本上是'zip(* a)[0]',只产生一个列表而不是一个元组 – 2013-02-25 10:46:10

相关问题