Найти - Пользователи
Полная версия: Как проверить вхождение последовательности в список?
Начало » Python для новичков » Как проверить вхождение последовательности в список?
1 2 3
appetito
Есть список L=
как проверить, входит ли список S в L (является ли “подсписком”)
например S= - входит, а S= и S= - не входят.

у меня 2 варианта:
str(S)[1:-1] in str(L)[1:-1]

и

S == L[ L.index(S[0]) : L.index(S[-1])+1 ]
а как принято в Питоне?
alexx11
Первый вариант не прокатит, так как L= (типа входит), второй тоже т.к (типа нет). Ща гляну как надо, у меня где-то есть похожее.

Хмм… у меня другая задача, твою можно попробовать так:
len_S = len(S)
found = False;
for i in range(len(L)):
if L[i:i+len_S] == S:
found = True
break
bazooka
http://docs.python.org/library/stdtypes.html#set

не, невтему, условия сначала недочитал
appetito
alexx11
Первый вариант не прокатит, так как L= (типа входит),
а нукось так ?..
',%s,'% str(S)[1:-1] in ',%s,'% str(L)[1:-1]
Ferroman
def is_sublist(seq, sub_seq):
""" Return True if sub_seq is part of seq.

>>> is_sublist([1, 2, 3], [1, 2])
True
>>> is_sublist([1, 2, 3], [2, 1])
False
"""
seq_string = ''.join((str(item) for item in seq))
sub_seq_string = ''.join((str(item) for item in sub_seq))

return sub_seq_string in seq_string
alexx11
appetito Вообще, да, это гораздо оптимальней будет.
Ferroman Не совсем, см. выше аналогичный пример: is_sublist(, ) == True, а на деле это не так.
xa4a
Ferroman
def is_sublist(seq, sub_seq):
""" Return True if sub_seq is part of seq.

>>> is_sublist([1, 2, 3], [1, 2])
True
>>> is_sublist([1, 2, 3], [2, 1])
False
"""
seq_string = ''.join((str(item) for item in seq))
sub_seq_string = ''.join((str(item) for item in sub_seq))

return sub_seq_string in seq_string
>>> is_sublist(['эту','функцию', 'нельзя' ,'употреблять'], ['бля'])
True
http://en.wikipedia.org/wiki/String_searching_algorithm
Isem
appetito
alexx11
Первый вариант не прокатит, так как L= (типа входит),
а нукось так ?..
',%s,'% str(S)[1:-1] in ',%s,'% str(L)[1:-1]
Чтоб заработало, немного надо изменить:
',%s,'% str(b)[1:-1].replace(' ',',') in ',%s,'% str(a)[1:-1].replace(' ',',')
Или так можно попробовать:
>>> f = lambda x: ''.join('(%i)'%i for i in x)

>>> f([2,3]) in f([1,2,3,4])
True
>>> f([1,3]) in f([1,2,3,4])
False
alexx11
Isem Зачем так сложно то? Мржно ‘,%s,’ заменить на ‘,%s ,’
Второй пример не рабочий: f() in f() == True
Isem
alexx11
Isem Зачем так сложно то? Мржно ‘,%s,’ заменить на ‘,%s ,’
Второй пример не рабочий: f() in f() == True
Вообще то там должен быть список целых чисел, а не строк. Я отредактировал и подчеркнул это в примере.
Ну а если надо для любых типов, тогда
f = lambda x:'(%s)' % ')('.join(map(repr,x))
>>> f(['b', 3]) in f(['a', 'b', 3])
True
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB