Форум сайта python.su
Есть список 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 ]
Офлайн
Первый вариант не прокатит, так как 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)
Офлайн
http://docs.python.org/library/stdtypes.html#set
не, невтему, условия сначала недочитал
Отредактировано (Янв. 15, 2011 00:41:51)
Офлайн
alexx11а нукось так ?..
Первый вариант не прокатит, так как L= (типа входит),
',%s,'% str(S)[1:-1] in ',%s,'% str(L)[1:-1]
Офлайн
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
Офлайн
appetito Вообще, да, это гораздо оптимальней будет.
Ferroman Не совсем, см. выше аналогичный пример: is_sublist(, ) == True, а на деле это не так.
Офлайн
Ferromandef 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
Офлайн
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)
Офлайн
Isem Зачем так сложно то? Мржно ‘,%s,’ заменить на ‘,%s ,’
Второй пример не рабочий: f() in f() == True
Офлайн
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)
Офлайн