Lonely_Wanderer

решение задачи говна

Oct 9th, 2023 (edited)
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.44 KB | None | 0 0
  1. # чистая магия, даже не спрашивай как работает
  2. def gr(c, k=None):
  3.     if type(c) not in [list,tuple,str]: return "Not collection entered ! " + str( [c, [c]] )
  4.     elif type(c) in [list,tuple] and k==None: return "You have not entered the key"
  5.     if len(c)==0: return "Empty collection entered!"
  6.     if len(c)==1:
  7.         if k: return [tuple([c[0][k], [c[0]]])]
  8.         else: return [tuple([c[0], [c[0]]])]
  9.     result = [] # итоговый список, который будем возвращать
  10.     prev = 0    # индекс первой встречи текущего символа/элемента/значения
  11.     buf = []    # буферный список, в который заносим элементы, удовлетворяющие условие
  12.     for i in range(1, len(c)): # перебираем все элементы
  13.         if k: # если был введён ключ (индекс ключа), то сравнивать будет значения ключей
  14.             u1 = c[prev][k]
  15.             u2 = c[i][k]
  16.         else: # если ключ не был введён, то сравниваем элементы (символы, числа и тд)
  17.             u1 = c[prev]
  18.             u2 = c[i]
  19.         if u1 != u2: # если предыдущий элемент отличается от текущего, то
  20.             buf.append(c[prev]) # добавить последнее упоминание элемента в буферный
  21.             result.append(tuple([u1, buf])) # добавить в результирующий список запись
  22.             prev = i    # переназначить индекс "нового" элемента
  23.             buf = []    # очистить буферный список
  24.         else:       # если предыдущий и текущий элементы совпадают, то добавить текущий элемент в буферный список
  25.             buf.append(c[i])
  26.     buf.append(c[len(c) - 1])  # добавляем последний элемент в буферный список
  27.     result.append(tuple([u2,buf])) # добавляем последнее значение в результирующий список
  28.     return result # возвращаем результирующий списка
  29.  
  30.  
  31. print(gr("AAAABBBCAAA"))
  32.  
  33. l2 = [('foo', 1), ('bar', 1), ('foobar', 2), ('baz', 3)]
  34. print(gr(l2, 1))
  35.  
  36.  
  37.  
Add Comment
Please, Sign In to add comment