2014-10-02 2 views
1

У меня есть список списков, соответствующих строкам в файле, с несколькими столбцами.Как проверить, существует ли элемент в списке списков python

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

Я хочу, чтобы проверить, если (например) elem3 в любом из списков, и если да, то перейти в этот список. (На самом деле у меня есть список вещей, которые мне нужно проверить, так это список, который, вероятно, содержит elem3, elem5, elem7 .... и т.д.)

+0

Что именно вы подразумеваете под словом "go into the list"? – NPE

+0

просто верните его (я планирую оценить остальные элементы в списке). Это как если бы я использовал elem3 в качестве ключа в списке. К сожалению, файл не настроен как словарь. – user3264659

+0

На ваш вопрос ответ: http://stackoverflow.com/a/1156143/1628832 – karthikr

ответ

1

Вы можете сделать что-то вроде этого:

def in_list(list_of_lists, item): 
    for list_ in list_of_lists: 
     if item in list_: 
      return list_ 

EDIT :

Вот рекурсивная версия для щеколду его:

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

+0

Сложность этого алгоритма - это не то, о чем вам следует беспокоиться. 'in' не перебирает список, поэтому вы просто собираетесь перебирать list_of_lists. Это не должно быть медленным. –

+0

@ user3264659: В чем проблема с циклизацией над 2000 списками? – NPE

1

самый короткий путь заключается в использовании list comprehensions и list 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 call со списком:

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

Обратите внимание, что это фактически не позволяет избежать проблемы вложенных циклов ответа @ BobbyRussell. Он просто скрывает его. Сопоставление списков имеет, по существу, ту же производительность, что и для циклов. –

+0

Спасибо. Мне просто нужно использовать pandas вместо того, чтобы присоединиться к столбцу, в котором я нахожу свои элементы ... – user3264659

Смежные вопросы