2

假设我有一个像下面这样的列表,我正在尝试迭代nested_list[i][1]元素并返回一个布尔值

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 的新手,所以请有更多经验的人告诉我:有没有更 Pythonic 的方法来做到这一点?

4

6 回答 6

4

尝试这个:

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

如果您只想检查成员资格,我建议您确实使用(...),而不是[...]因为后者会在确实不需要这样做时创建整个列表。

于 2012-09-20T21:40:32.923 回答
2

ARS 已经提出了一个很好的解决方案,但另一个答案是简单的any(i[1] == 1 for i in nested_list)

于 2012-09-20T21:47:57.550 回答
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
于 2012-09-20T21:38:40.350 回答
0

这个使用itertools的答案也会在第一次命中时短路。

>>> from operator import itemgetter
>>> from itertools import imap
>>> 
>>> 1 in (imap(itemgetter(1), nested_list))
True
于 2012-09-20T23:36:20.093 回答
0

像这样的东西?

for (x,y) in nested_list:print y
于 2012-09-20T21:43:23.287 回答
0

让我添加这个。

print(1 in zip(*nested_list)[1])
于 2012-09-21T08:40:23.783 回答