2014-10-03 1 views
1

Напишите функцию под названием sublist. Функция принимает 2 список в качестве параметров, и возвращает истину, если элементы в первом списке отображаются в том же порядке, где-то во втором списке (и ложные, если они не делают)Как проверить, отображается ли первый список в том же порядке где-то во втором списке

Вот некоторые примеры:

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

Вот что я до сих пор:

def sublist(list1,list2): 
    for i in range(len(list2)): 
     if list2[i] != list1[i]: 
      return False 
     return True 

выход:

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

Я знаю, это не совсем правильно, и я знаю, что мне придется использовать [:] для извлечения части строки или списка, но я не знаю, с чего начать. Любая помощь будет отличной, спасибо.

+0

Что делает ваш существующий код? – skrrgwasme

+0

@SLawson Я просто добавил вывод. – yummyyenni

+0

@SLawson ладно спасибо, я проверю это – yummyyenni

ответ

1

Попробуйте это:

def sublist(list1, list2): 
    n = len(list1) 
    return any((list1 == list2[i:i + n]) for i in range(len(list2) - n + 1)) 

print sublist([2, 3], [1, 2, 3, 4, 5]) 
print sublist([1, 3], [1, 2, 3, 4, 5]) 
print sublist([1, 2, 3], [1, 2, 1, 2, 3, 4]) 

Нам нужно знать длину подсписке, это то, что п для.

Затем any() остановится после первого матча в истребителе. Часть внутри any() - это generator, мы сравниваем подсписку (list1) с каждым из подписок в списке2, начиная с начала и до конца.

i будет варьироваться от 0 до длины второго списка, но вы вычеркиваете длину первого списка, а затем добавляете 1, чтобы вы не переходили в конец индекса.

+0

Спасибо, что работает, но если вы можете, не могли бы вы объяснить мне, что происходит? – yummyyenni

+0

Большое спасибо, что сделало вещи очень ясными! – yummyyenni

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