2012-09-20 28 views
2

假设我有类似下面的列表中,我试图遍历nested_list[i][1]元素,并返回一个布尔值在python中迭代嵌套列表的更简单的方法是什么?

nested_list = [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [1, 9]] 

print 1 in (nested_list[i][1] for i in range(nested_list)) 

我仍然在Python中的新手,所以更有经验的人请告诉我:有没有一个更Python的方式来做到这一点?

回答

0
>>> import numpy 
>>> a = numpy.array(nested_list) 
>>> a[:,1] 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
>>> 1 in a[:,1] 
True 
4

试试这个:

print 1 in (i[1] for i in nested_list) 

如果你只是要检查的成员,我会建议你确实使用(...)代替[...],因为后者将在创建整个名单有真的没有必要这样做。

+0

感谢这比使用LEN()函数 – mehmettekn

+0

很高兴我能帮助:-) – arshajii

+0

如何[...]或(...)的工作就轻松多了? – mehmettekn

0

像这样?

for (x,y) in nested_list:print y 
+2

这真的不是他想要做的事情... –

2

A.R.S已经提出了一个很好的解决方案,但一个替代答案只是any(i[1] == 1 for i in nested_list)

+0

这也是一个很好的建议。但是我不得不说我还喜欢A.R.S更好。谢谢反正 – mehmettekn

+0

@mehmettekn:我认为这个答案是要走的路。 'x in '模式有点过于迷惑。 –

0

此回答使用itertools也会在第一次击中时短路。

>>> from operator import itemgetter 
>>> from itertools import imap 
>>> 
>>> 1 in (imap(itemgetter(1), nested_list)) 
True 
0

让我来添加一个。

print(1 in zip(*nested_list)[1]) 
相关问题