Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 14, 2011 23:00:26

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

Есть список 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 ]
а как принято в Питоне?



Офлайн

#2 Янв. 14, 2011 23:08:29

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

Первый вариант не прокатит, так как L= (типа входит), второй тоже т.к (типа нет). Ща гляну как надо, у меня где-то есть похожее.

Хмм… у меня другая задача, твою можно попробовать так:

len_S = len(S)
found = False;
for i in range(len(L)):
if L[i:i+len_S] == S:
found = True
break



Отредактировано (Янв. 14, 2011 23:45:42)

Офлайн

#3 Янв. 15, 2011 00:38:30

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

http://docs.python.org/library/stdtypes.html#set

не, невтему, условия сначала недочитал



Отредактировано (Янв. 15, 2011 00:41:51)

Офлайн

#4 Янв. 15, 2011 00:40:34

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

alexx11
Первый вариант не прокатит, так как L= (типа входит),
а нукось так ?..
',%s,'% str(S)[1:-1] in ',%s,'% str(L)[1:-1]



Офлайн

#5 Янв. 15, 2011 01:35:00

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

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

Офлайн

#6 Янв. 15, 2011 08:03:12

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

appetito Вообще, да, это гораздо оптимальней будет.
Ferroman Не совсем, см. выше аналогичный пример: is_sublist(, ) == True, а на деле это не так.



Офлайн

#7 Янв. 15, 2011 10:59:06

xa4a
От:
Зарегистрирован: 2008-05-28
Сообщения: 12
Репутация: +  1  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

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



Офлайн

#8 Янв. 15, 2011 17:38:07

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

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



Отредактировано (Янв. 15, 2011 18:23:23)

Офлайн

#9 Янв. 15, 2011 18:19:54

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

Isem Зачем так сложно то? Мржно ‘,%s,’ заменить на ‘,%s ,’
Второй пример не рабочий: f() in f() == True



Офлайн

#10 Янв. 15, 2011 18:27:47

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Как проверить вхождение последовательности в список?

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



Отредактировано (Янв. 15, 2011 18:40:26)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version