2016-01-13 103 views
-8

的第一個元素我有下面的代碼:檢索列表的嵌套在另一個列表

addresses = [['Jim', 543, 65], ['Jack', 4376, 23], ['Hank', 764, 43]] 
print addresses[0:][0] # I want this to return: ['Jim', 'Jack', 'Hank']` 

我怎麼會做這種打印出來只在addresses的名字?

我用這個:

for item in addresses: 
    print item[0] 
+1

我從來沒有見過一個問題,得到如此多的答案和降低如此之快的答案。 – Kupiakos

+0

@ Kupiakos,你的意思是,這麼多_answers_,對吧? – ForceBru

+1

我正在看人們試圖迴應的第一次大聲笑 – FirebladeDan

回答

0
print([x[0] for x in addresses]) 
2
from operator import itemgetter 
print(map(itemgetter(0), addresses)) 

這將選擇從addresses每個元件中的第一項,並從它創建一個新的列表。 itemgetter(0)比lambda更快。

0

可以使用list comprehension讓您的地址列表,從每個列表中的第一項(item[0])。然後你只需要打印它。從REPL:

>>> addresses = [['Jim', 543, 65], ['Jack', 4376, 23], ['Hank', 764, 43]] 
>>> [item[0] for item in addresses] 
['Jim', 'Jack', 'Hank'] 
>>> for name in [item[0] for item in addresses]: 
...  print(name) 
... 
Jim 
Jack 
Hank 

Python的print讓你速記這:

print([item[0] for item in addresses]) 
+2

IIRC,他們被稱爲列表理解,或生成器理解,或字典理解,或集合理解,這取決於你在做什麼。 – Kupiakos

+0

好趕上!太多斯卡拉腦損傷。 :D –

0

您可以使用list comprehension

>>> names = [sublist[0] for sublist in addresses] 
>>> names 
['Jim', 'Jack', 'Hank'] 
0

你想這樣的:

print [a[0] for a in addresses] 

這裏a是一個子陣列,a[0]是它的第一個元素。

+0

這很好。謝謝。 –

+0

@TravisRoderick,不客氣 – ForceBru

2
print("\n".join(zip(*addresses)[0])) 
#or maybe just 
print(zip(*addresses)[0]) 

還不如扔一個更加融入環:P

3

還有一個解決方案與map

print(list(map(lambda x: x[0], addresses))) 
['Jim', 'Jack', 'Hank'] 

或者你可以使用operator.itemgetter(0)作爲@Kupiakos的評論所說:

from operator import itemgetter(0) 
print(list(map(itemgetter(0), addresses))) 
['Jim', 'Jack', 'Hank'] 

計時

In [648]: %timeit list(map(operator.itemgetter(0), addresses)) 
1000000 loops, best of 3: 1.16 µs per loop 

In [649]: %timeit list(map(lambda x: x[0], addresses)) 
1000000 loops, best of 3: 1.25 µs per loop 
+1

您還可以使用'operator.itemgetter(0)'而不是lambda來獲得更快的速度。 – Kupiakos