2015-10-28 2 views
1

В python можно использовать ключевое слово is для проверки наличия, например.Как проверить подпоследовательность в списке?

>>> 3 in [1,2,3,4,5] 
True 

Но это не дает тот же результат, если это проверка, является ли список из одного целого числа внутри списка ссылок [1,2,3,4,5]:

>>> [3] in [1,2,3,4,5] 
False 

Кроме того, проверка подпоследовательности в списке литературы не может быть достигнуто:

>>> [3,4,5] in [1,2,3,4,5] 
False 

есть ли способ, чтобы иметь функцию, которая проверяет подпоследовательность такие, что следующий возвращает т пожалеет?, например. вызов функции x_in_y():

>>> x_in_y([3,4,5], [1,2,3,4,5]) 
True 
>>> x_in_y([3], [1,2,3,4,5]) 
True 
>>> x_in_y(3, [1,2,3,4,5]) 
True 
>>> x_in_y([2,3], [1,2,3,4,5]) 
True 
>>> x_in_y([2,4], [1,2,3,4,5]) 
False 
>>> x_in_y([1,5], [1,2,3,4,5]) 
False 

Может быть что-то из itertools или operator?

(Примечание, входные списки могут быть не уникальным)

+1

Я думаю, на это уже был дан ответ. http://stackoverflow.com/questions/2361945/detecting-consecutive-integers-in-a-list –

ответ

4

x_in_y() может быть реализован путем нарезки исходного списка и сравнения ломтиков к списку ввода:

def x_in_y(query, base): 
    try: 
     l = len(query) 
    except TypeError: 
     l = 1 
     query = type(base)((query,)) 

    for i in range(len(base)): 
     if base[i:i+l] == query: 
      return True 
    return False 

range Смените в xrange, если вы используете python2.

0

Может быть что-то вроде этого:

def x_in_y(search_list, my_list): 
    return all([s in my_list for s in search_list]) 

при условии, что search_list список.

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