2014-10-02 212 views
1

我有一列列表,它们对应于文件中的行,列有多列。如何检查列表中是否存在元素python

[ [col1, col2, col3], [elem1, elem2, elem3], [elem4, elem5, elem6] ] 

我要检查,如果(例如)elem3是在任何名单的,如果是,进入该名单。 (真我的事情,我需要检查的列表,所以它的,可能包含elem3elem5elem7列表....等)

+0

究竟是什么意思,“进入该列表”? – NPE 2014-10-02 18:52:51

+0

只是返回它(我打算评估列表中的其他元素)。就好像我使用elem3作为列表中的关键。不幸的是,该文件没有设置为字典。 – user3264659 2014-10-02 18:59:30

+0

您的问题在这里回答:http://stackoverflow.com/a/1156143/1628832 – karthikr 2014-10-02 19:00:53

回答

1

你可以做这样的事情:

​​3210

编辑:

这里是它赫克一个递归版本:

def in_list(list_of_lists, item): 
    if not list_of_lists: 
     return None 
    if item in list_of_lists[0]: 
     return list_of_lists[0] 
    return in_list(list_of_lists[1:], item) 
+0

是否有任何其他方式来做到这一点比循环所有列表?我有2000个列表,每个列表中有8个元素。 – user3264659 2014-10-02 18:58:01

+0

这个算法的复杂性不是你应该担心的。 'in'不会遍历整个列表,所以你只需要遍历list_of_lists。它应该不会很慢。 – 2014-10-02 19:00:04

+0

@ user3264659:循环2000多个列表时出现什么问题? – NPE 2014-10-02 19:00:10

1

最短的方法是使用list comprehensionslist comprehensions有时比简单的快多了for loop

列表:

list1 = [ ["col1", "col2", "col3"], ["elem1", "elem2", "elem3"], ["elem4", "elem5", "elem6"] ] 

你的元素:寻找

to_find = "col1" 

你的函数 “进入该名单”:

def do_something(sub_list): 
    print (sub_list) 

list comprehension会发现你的元素a nd带有列表的呼叫功能:

[do_something(sub_list) for sub_list in list1 if to_find in sub_list] 
+0

请注意,这实际上并不能避免@BobbyRussell答案的嵌套循环问题。它只是隐藏它。列表解析与循环具有基本相同的性能。 – 2014-10-02 19:11:07

+0

谢谢。我可能只需要使用熊猫来加入我在我的元素中找到... – user3264659 2014-10-03 22:24:28

相关问题