IsemМожет там вообще только цифры от 0 до 5?
Вообще то там должен быть список целых чисел, а не строк.
IsemЭто тоже для строк не работает, выдаёт ошибку.
>>> f = lambda x: ‘'.join(’(%i)'%i for i in x)
IsemМожет там вообще только цифры от 0 до 5?
Вообще то там должен быть список целых чисел, а не строк.
IsemЭто тоже для строк не работает, выдаёт ошибку.
>>> f = lambda x: ‘'.join(’(%i)'%i for i in x)
alexx11В лямбде русским по белому написано, что принимаются только целые числа в списке.IsemМожет там вообще только цифры от 0 до 5?
Вообще то там должен быть список целых чисел, а не строк.IsemЭто тоже для строк не работает, выдаёт ошибку.
>>> f = lambda x: ‘'.join(’(%i)'%i for i in x)
IsemЭто всё верно, только зачем плодить неверные решения, когда есть решение максимально широко охватывающее поставленную задачу, с наиболее оптимальной реализацией.
В лямбде русским по белому написано, что принимаются только целые числа в списке.
Isem>>> f() in f()
Ну а если надо для любых типов, тогдаf = lambda x:'(%s)' % ')('.join(map(repr,x))
>>> f(['b', 3]) in f(['a', 'b', 3])
True
appetitoнапример можно так:
а как принято в Питоне?
L = set([1,2,'a',3,4,5])
S = set(['a',2,3,4])
print not (S - L)
# True
alexx11Это вы свою реализацию имеете в виду? И что, взятие срезов списка в цикле вы считаете наиболее оптимальной реализацией?
Это всё верно, только зачем плодить неверные решения, когда есть решение максимально широко охватывающее поставленную задачу, с наиболее оптимальной реализацией.
alexx11Тут да, для строк, к сожалению, такой метод не работает.
>>> f() in f()
True
alexx11
appetito Вообще, да, это гораздо оптимальней будет.
len_S = len(S)
found = False;
for i in range(len(L)):
if L[i:i+len_S] == S:
found = True
break
appetitoмаленькая ошибка исправляется заменой в коде ‘,%s,’ на ‘,%s ,’ Приведу правильный код, что можно было оставить эти “три сосны” в покое:',%s,'% str(S)[1:-1] in ',%s,'% str(L)[1:-1]
',%s, '% str(S)[1:-1] in ',%s, '% str(L)[1:-1]
appetitoЧто ж, приму к сведению, сам в больших объёмах ей не пользовался, поэтому видно наврал в прогнозе её оптимальности =)
alexx11, твой вариант быстрее работает на длинных списках, str(L) - дорогая операция для большого списка ((
def is_sublist(L, S):
len_S_minus_one = len(S) - 1
first_S = S[0]
found = False;
if not len_S_minus_one:
if first_S in L : return True
else:
other_S = S[1:]
index = 0
while True:
try:
index = 1+L.index(first_S, index)
except ValueError:
break
if L[index:index+len_S_minus_one] == other_S:
found = True
break
return found