2013-07-18 18 views
3

我有一个做出来的名单列表说3项:查找项目在列表里面列表

a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]] 

我需要检查,如果给定值,说7,存在于任何第一项目(即:项目[0])的任何列表中的a。在这种情况下,结果是True,因为它存在于a[2][0]中。

这是我想出,我想知道是否有更好的方法来做到这一点:

a = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]] 
number = 7 
out = False 

for item in a: 
    if number == item[0]: 
     out = True 
+1

任何'(7在我对于i在一个)' –

+0

:ELY打破当找到一个值。 –

+0

@OrriBarel是的,我不太清楚这是我评论但不发表回答的原因 –

回答

3

使用any是好,因为它immediat @GrijeshChauhan的OP希望在每个子列表仅检查第一项

>>> any(7 == i[0] for i in a) 
True 
+0

我喜欢这个答案:) –

+1

@GrijeshChauhan是不是Python的乐趣:) – TerryA

+0

是的,真的我必须在C编写太长的代码:( –

7

有多种方式,以更紧密地写:

7 in (x[0] for x in a) # using a generator to avoid creating the full list of values 

或使用一些标准库模块:

import operator 
import itertools 

first_elem = operator.itemgetter(0) 

7 in itertools.imap(first_elem, a) 
+1

发电机很好,我喜欢它! – tamasgal

+0

我不确定,告诉我你不能这样做:'7 ==(x [0] for x in a)',我是否正确? –

+0

你是对的。这将比较7到一个生成器,所以它永远不会是真的。 –