Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # чистая магия, даже не спрашивай как работает
- def gr(c, k=None):
- if type(c) not in [list,tuple,str]: return "Not collection entered ! " + str( [c, [c]] )
- elif type(c) in [list,tuple] and k==None: return "You have not entered the key"
- if len(c)==0: return "Empty collection entered!"
- if len(c)==1:
- if k: return [tuple([c[0][k], [c[0]]])]
- else: return [tuple([c[0], [c[0]]])]
- result = [] # итоговый список, который будем возвращать
- prev = 0 # индекс первой встречи текущего символа/элемента/значения
- buf = [] # буферный список, в который заносим элементы, удовлетворяющие условие
- for i in range(1, len(c)): # перебираем все элементы
- if k: # если был введён ключ (индекс ключа), то сравнивать будет значения ключей
- u1 = c[prev][k]
- u2 = c[i][k]
- else: # если ключ не был введён, то сравниваем элементы (символы, числа и тд)
- u1 = c[prev]
- u2 = c[i]
- if u1 != u2: # если предыдущий элемент отличается от текущего, то
- buf.append(c[prev]) # добавить последнее упоминание элемента в буферный
- result.append(tuple([u1, buf])) # добавить в результирующий список запись
- prev = i # переназначить индекс "нового" элемента
- buf = [] # очистить буферный список
- else: # если предыдущий и текущий элементы совпадают, то добавить текущий элемент в буферный список
- buf.append(c[i])
- buf.append(c[len(c) - 1]) # добавляем последний элемент в буферный список
- result.append(tuple([u2,buf])) # добавляем последнее значение в результирующий список
- return result # возвращаем результирующий списка
- print(gr("AAAABBBCAAA"))
- l2 = [('foo', 1), ('bar', 1), ('foobar', 2), ('baz', 3)]
- print(gr(l2, 1))
Add Comment
Please, Sign In to add comment