2016-01-13 101 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