2016-06-01 177 views
0

我有一个元组列表这种格式的列表:遍历元组

my_list = [(1,4),(3,6),(10,7)] 

我要打印的每个元组的第二个元素:

4,6,7 

我可以访问这些值:

my_list[0][1] 
my_list[1][1] 
my_list[2][1] 

但是,这并不是任何合理的尺寸列表一个合理的方法,就目前而言,使用列表理解这样做:

[x[1] for x in my_list ] 

是否有任何解决方案不暗示使用循环? 类似:

my_list[:][1] 

我试图这样做的,但得到:

(3, 6) 
+1

提到如果元素的顺序不在于你可以试试这个'字典(my_list).values()'。 – AceLearn

回答

2

[:]刚刚创建列表的副本,所以[1]指数复制了。不,在NumPy数组之外,技术上无法避免循环。循环可以用C代码完成,像map()这样的函数,但是无论如何将会有一个循环。

使用map()例如应用可调用的每个元素在你的输入列表:

map(lambda nested: nested[1], my_list) 

from operator import itemgetter 

map(itemgetter(1), my_list) 

在Python 2同时工作,在Python 3,你需要换行map()通话在调用list()来驱动迭代。

无论哪种方式,我发现列表理解在这里更清晰。

+0

在numpy数组的情况下它是不同的解决方案吗? –

+1

@LuisRamonRamirezRodriguez:Numpy数组支持多维,你可以将它作为矩阵中的一列:'matrix [:,1]'。请参阅[NumPy快速入门](https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#indexing-slicing-and-iterating) –

1

正如python get list of tuples first index

尝试zip

my_list = [(1,4),(3,6),(10,7)] 

print zip(*my_list)[1] 

(4, 6, 7) 
+1

请解释'zip()'包含循环和完全产生两个独立的元组,其中一个你再次丢弃。 –