0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 60

Abbccc -> a1b2c3

19.03.2019, 21:25. Показов 2821. Ответов 18

Студворк — интернет-сервис помощи студентам
Как из "aaabbbcc" сделать "@3a3b2c"?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2019, 21:25
Ответы с готовыми решениями:

Вывести последовательность символов ABBCCC.ZZ.Z
как вывести последовательность символов ABBCCC...ZZ..Z в С++? (все перерыл есть ток в паскале)

Вывести последовательности: ABBCCC...ZZZ...Z, ZYYXXX...AAA...A,
Хелп)) Вывести последовательности: ABBCCC...ZZZ...Z, ZYYXXX...AAA...A, ABC...Z BC...Z C...Z ... Z.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
17 / 12 / 5
Регистрация: 21.07.2018
Сообщений: 59
19.03.2019, 22:35
Python
1
2
3
4
5
6
7
8
9
10
11
12
import collections
input_string = 'aaabbbcc'
output_string = '@'
 
d = collections.defaultdict(int)
for c in input_string:
    d[c] += 1
 
for c in sorted(d, key=d.get, reverse=True):
    output_string = output_string + '%d%s' % (d[c], c)
 
print (output_string)
1
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 60
19.03.2019, 22:37  [ТС]
Спасибо, но я прям чайник чайник. И мне сложновато понять некоторые элементы
0
338 / 127 / 114
Регистрация: 09.04.2011
Сообщений: 246
19.03.2019, 22:44
Можно и как то так...

Python
1
2
3
4
5
6
7
8
9
10
11
12
s = "aaabbbcc "
c = 1
res = ""
 
for i in range(len(s)-1):
    if s[i] == s[i+1]:
        c += 1
    else:
        res = res + str(c) + s[i]
        c = 1
 
print(res)
1
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
19.03.2019, 22:45
TheSpartanec, проявите терение, разясню код выше.
0
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 60
19.03.2019, 22:53  [ТС]
Во, привычный вид с простыми переменными))) а вот, если не затруднит, я тут в ступор впал, не скажите как оно в данной строке работает, что происходит, так сказать
if s[i] == s[i+1]:
и к чему тут else?
0
17 / 12 / 5
Регистрация: 21.07.2018
Сообщений: 59
19.03.2019, 22:53
TheSpartanec,

используете defaultdict из модуля collection. Особенность его в том, что каждому ключу , по-умолчанию, назначает значение 0.

Далее идете посимвольно в строке input_string, занося символы в словарь. В конце-концов у вас имеется словарь , ключ которого - буква,а значение - количество повторений в строке.


Второй цикл - для каждого элемента словаря получаете его значение , с помощью get(), причем всё это сортируете по-убыванию. (Хотя ,возможно, это уже лишнее в этом примере)

Ну и конкатенируете строки в выходную строку output_string.
1
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
19.03.2019, 22:55
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import collections # импорт коллекций(библиотека)
 
input_string = 'aaabbbcc' # входная строка
output_string = '@' # выходная
 
d = collections.defaultdict(int) # ckdjfhm колллекций(по умолчанию, который, конвертируем в число ключ)
for c in input_string: # ищем значение в строке, получаемой программой 
    d[c] += 1 # наращиваем, коль нашли,
 
for c in sorted(d, key=d.get, reverse=True): # выводим в обратнном порядке
    output_string = output_string + '%d%s' % (d[c], c) #в тех местах, где стояли считаемые значения, вставляем их колмчество
 
print(output_string)#вывод
1
338 / 127 / 114
Регистрация: 09.04.2011
Сообщений: 246
19.03.2019, 22:57
TheSpartanec,

Python
1
if s[i] == s[i+1]:
#Сравниваем буквы, если совпадают то делаем c + 1, пока совпадают

Когда перестают совпадать записываем букву, которой вели счет и ее кол-во в новую строку res
Python
1
2
3
else:
        res = res + str(c) + s[i]
        c = 1
1
17 / 12 / 5
Регистрация: 21.07.2018
Сообщений: 59
19.03.2019, 23:01
TheSpartanec,

Во, привычный вид с простыми переменными))) а вот, если не затруднит, я тут в ступор впал, не скажите как оно в данной строке работает, что происходит, так сказать
if s[i] == s[i+1]:
и к чему тут else?
Вам нужно записать в выходной строке : количество повторений символа , а потом и сам символ.

Это условие нужно для того, чтобы проверить является следующий символ таким же , как текущий , если да - количество повторений нужно увеличить на 1, если нет - значит записать ответ в выходную строку.
1
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
19.03.2019, 23:02
TheSpartanec, если что, обращайтесь, я, конечно, "паству" не собираю, отдельных методологий не имею, а то есть у нас тут такая тенденция, но, в меру сил, объяснить могу.
Дабы не разводить флуд, реквизиты в подписи есть, но, это уж по желанию(основное общение на форуме должно быть, таковы правила).
0
0 / 0 / 0
Регистрация: 25.09.2018
Сообщений: 60
19.03.2019, 23:02  [ТС]
Примерно понял, спасибо.
Тоесть s[i+1] перемещает от текущего значения на 1 символ\знак больше\дальше?!
Но в range у нас -1, а в условии : у нас идёт +1... или это уже не то?
0
17 / 12 / 5
Регистрация: 21.07.2018
Сообщений: 59
19.03.2019, 23:03
нумерация элементов идёт с 0. Т.е в строке

Python
1
str = 'privet'
str[0] будет равно 'p', а у 't' в str[len(str)-1].
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.03.2019, 17:00
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# Если брать заголовок темы "Abbccc -> a1b2c3"
s = 'abbccc'
r = [s[0]]
count = 1
for i in s[1:]:
    if i == r[-1]:
        count += 1
    else:
        r.append(str(count))
        r.append(i)
        count = 1
r.append(str(count))
print(''.join(r))
1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
21.03.2019, 18:01
Что-то у меня дежавю Кодирование .
defaultdict тут не нужен, нужен groupby.
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
21.03.2019, 18:57
Python
1
2
3
4
5
6
7
8
9
10
11
import itertools
 
def encode(s):
    return "@" + "".join(str(len(list(group))) + key for key, group in itertools.groupby(s))
 
def main():
    s = "aaabbbcc"
    print(encode(s))
 
if __name__ == "__main__":
    main()
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
21.03.2019, 19:14
Цитата Сообщение от Arsegg Посмотреть сообщение
len(list(
Неплохо, но я бы предпочёл
Python
1
sum(1 for i in group)
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
21.03.2019, 19:24
dondublon,
Python
1
2
3
4
5
In [1]: %timeit sum(1 for i in range(100000))
7.2 ms ± 303 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
 
In [2]: %timeit str(len(list(range(100000))))
2.87 ms ± 49.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
21.03.2019, 19:27
Arsegg, ну я не знаю, как у вас так получилось, но вот мои результаты:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n = 10000
 
def calc_len_list():
 
    return len(list(range(n)))
 
%timeit calc_len_list()
 
280 µs ± 51.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
 
def calc_len_sum():
 
    return sum(1 for x in range(n))
 
%timeit calc_len_sum
 
30.3 ns ± 4.84 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Что ожидаемо. Создавать список в памяти - дольше, чем не создавать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Опции темы

Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru