2016-04-12 2 views
2

listIf У меня есть список списков. Где каждый дополнительный список отличается от следующего, иногда даже пустым.Списки поиска для последовательности

list[0]=['This','is','the','sequence'] 
    list[1]=['This','is','another','sequence'] 
    list[2]=[] 
    list[n]=[a,b,c,d] 

Как я могу искать списки и правильно идентифицировать, когда появляется список [n]. (IE идентифицировать, b, c, протекающие затем извлечь д.)

Я попытался

for lists in my_list[1:]: 
      if not lists: 
      continue 
      if (lists[0]=='a') & (lists[1]=='b') &(lists[2]=='c'): 
      extracted_variable = lists[3] 

Однако я получаю «индекс списка из диапазона» для пустых списков. Какие функции могут работать в моих интересах?

ответ

0

Ответ:

for l in lists: 
    if l[:3] == ['a', 'b', 'c'] and len(l) > 3: 
     print l[3] 

Объяснение:

Причина вы получаете «индекс списка из диапазона» на пустые списки, потому что вы пытаетесь получить доступ к индексу, который находится вне диапазона (списки [0 ] == 'a'). Синтаксис, который я использовал l[:3], дает вам список из списка с 3-мя наименованиями. например, это [1,2,3,4][:3] вернет это [1,2,3]. Для пустых списков нет проблем, потому что он просто вернет пустой список.

Так что, как я использовал выше, мы просто возьмем дополнительный список из 3-х пунктов и проверьте, есть ли в нем список ["a", "b", "c"]. если это так, то убедитесь, что в списке есть хотя бы еще один элемент (путем проверки len() списка), и если мы его напечатаем.

Также вы не должны использовать ключевое слово «список» в вашем коде для имен переменных, но я предполагаю, что это может быть просто пример для вопроса.

Вы должны прочитать больше о списках в питоне и как использовать их (http://www.tutorialspoint.com/python/python_lists.htm)

0

первой длину проверки списка больше 2 и применить обратные условия следующим образом: используя цикл:

my_list = [['This', 'is', 'the', 'sequence'], ['This', 'is', 'another', 'sequence'], [], ['a', 'b', 'c', 'd']] 
for lst in my_list: 
    if len(lst) > 2 and lst[0] == 'a' and lst[1] == 'b' and lst[2] == 'c': 
     extracted_variable = lst[3] 
     print extracted_variable 

используя список понимание:

my_list = [['This', 'is', 'the', 'sequence'], ['This', 'is', 'another', 'sequence'], [], ['a', 'b', 'c', 'd']] 
a = [lst[3:] for lst in my_list if len(lst) > 2 and lst[0] == 'a' and lst[1] == 'b' and lst[2] == 'c'] 
print a[0][0] 

выход:

d 

надеюсь, что это помогает :)

0

Вы можете применить технику скользящего/подвижного окна:

from itertools import islice 

all_lists = [ 

    [1,2,3], 
    [4,5,6,5,4,7,8], 
    [7,8,9,4,4], 
    [1,], 
    ["a","b","c"], 

] 

## All the lists you want to find 
## We use tuples becuase lists are not hashable. You also can do this tuple([1,2,3]) 
target_list_1 = ("a","b","c") 
target_list_2 = (1,2,3) 

## A counter for your target lists you want to find 
counter_dict = { 
    target_list_1 : 0, 
    target_list_2 : 0, 
} 


generator = islice(all_lists, len(all_lists)) 

for item in generator: 

    ## You can add as many checking conditions as you want, you may 
    ## also use switch statment here, whatever you want 

    if item == list(target_list_1): 
     counter_dict[target_list_1] +=1 

    if item == list(target_list_2): 
     counter_dict[target_list_2] +=1 


print counter_dict 

Выход:

{ 
    ('a', 'b', 'c') : 1, 
    (1, 2, 3)  : 1 
}