2013-02-25 64 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

相關問題