Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
16 / 16 / 8
Регистрация: 18.03.2014
Сообщений: 268

Дайте советы по улучшению кода

26.11.2016, 14:37. Показов 889. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно улучшить код чтобы сократить время его выполнения до минимума? Можно как нибудь игнорировать первую строку без использования переменной?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
lines = []
resStr = ""
 
with open("input.txt") as fr:
    firstLine = True
    for line in fr:
        if firstLine:
            firstLine = False
        else:
            lines.append(line.strip("\n"))
fr.close()
 
for line in lines:
    chrs = ""
    r = 0
 
    for chr in line:
        if chrs.find(chr) == -1:
            chrs = chrs + chr
    sumArr = [0 for k in range(len(chrs))]
    for chrInd in range(len(chrs)):
        for chr in line:
            if chr == chrs[chrInd]:
                sumArr[chrInd] = sumArr[chrInd] + 1
                
    sumArr.sort()
    sumArr.reverse()
    
    for k in range(sumArr.count(sumArr[0]), len(sumArr)): sumArr.pop(k)
    resStr = resStr + str(sum(sumArr)) + "\n"
    
with open("output.txt", "w") as fw:
    fw.write(resStr.strip("\n"))
    
fw.close()
Условие
Назовём строку сбалансированной, если количество каждой из содержащихся в ней букв входит в строку одно и то же количество раз. Например, строки aaa и bcbccccbbcbb сбалансированы, а строки aab и defed — нет.
По данной строке требуется определить длину её самой длинной сбалансированной подстроки.
Формат входного файла
Первая строка входного файла содержит целое число N — количество тестов в файле. Следующие N строк содержат по одной входной строке каждая.
Формат выходного файла
Выходной файл должен содержать N целых чисел, по одному на каждый тест: длины наибольших сбалансированных подстрок.

p.s я только начинаю в данном языке, так что укажите на все ошибки что у меня есть.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2016, 14:37
Ответы с готовыми решениями:

Нужны советы по улучшению кода
Хотелось получить рекомендации по устранению критериев "плохого кода"(длинные,сложные методы,дублирование кода и.т.п) (Это небольшая...

Оценка кода и советы по улучшению
Привет всем! Недавно закончил писать код, реализующий в консоли игру "Очко" (Двадцать одно). Хотелось бы получить конструктивную...

Приму советы по оптимизации и улучшению кода обработки клавиш
Вот, собственно, код: function KbdProc(Code: Integer; wParam: Word; lParam: Longint) : Longint; stdcall; type ...

5
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
26.11.2016, 18:04
Hopeco, ну на пример можно сократить код со 2 строчки до 11 вот так
Python
1
lines = [i.strip() for i in open('file.txt').readlines()[1:]]
+ хочу заметить, что в ты у себя закрываешь файл совершенно бессмысленно, потому что with сам закрывает файл

остальной код тоже можно оптимизировать наверняка, но сейчас нет время его смотреть
1
16 / 16 / 8
Регистрация: 18.03.2014
Сообщений: 268
26.11.2016, 18:45  [ТС]
Как работает функция max()?

Python
1
sum([a for a in sumArr if a == max(sumArr)])
Она проходит каждый раз по массиву и ищет максимальное значение? В таком случае стоит ли так делать?

На данный момент код получилось свернуть до такого состояния:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
lines = []
resStr = ""
 
lines = [k.strip() for k in open("input.txt").readlines()[1:]]
 
for line in lines:
    dict = list(set(line))
    
    sumArr = [0 for k in range(len(dict))]
    
    for chrInd in range(len(dict)):
        for chr in line:
            if chr == dict[chrInd]:
                sumArr[chrInd] = sumArr[chrInd] + 1
                
    resStr = resStr + str(sum([a for a in sumArr if a == max(sumArr)])) + "\n"
    
with open("output.txt", "w") as fw:
    fw.write(resStr.strip("\n"))
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
26.11.2016, 19:47
Цитата Сообщение от Hopeco Посмотреть сообщение
Она проходит каждый раз по массиву и ищет максимальное значение? В таком случае стоит ли так делать?
Да. Нет, не стоит.
Python
1
2
m = max(sumArr)
sum(a for a in sumArr if a == m)
Для подсчёта количеств штуковин в последовательностях существует Counter. С его пощью код уминается до
Python
1
2
3
4
5
6
7
8
9
10
from collections import Counter
 
 
lines = [i.strip() for i in open('input.txt').readlines()[1:]]
 
mcs = [Counter(line).values() for line in lines]
res = '\n'.join(str(sum(i for i in mc if i == mcm)) for mc, mcm in zip(mcs, map(max, mcs)))
 
with open("output.txt", "w") as fw:
    fw.write(res)
1
16 / 16 / 8
Регистрация: 18.03.2014
Сообщений: 268
27.11.2016, 01:35  [ТС]
Цитата Сообщение от shsv Посмотреть сообщение
for mc, mcm in zip(mcs, map(max, mcs))
Это двойной цикл или просто значение будет ложиться в две переменные?
0
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
27.11.2016, 11:21
Цитата Сообщение от Hopeco Посмотреть сообщение
значение будет ложиться в две переменные?
Да, в mc лежит множество количеств букв в строке, в mcm - максимальное количество этого множества.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2016, 11:21
Помогаю со студенческими работами здесь

Проверка кода и советы по его улучшению. Генерация случайных чисел и проверка на уникальность
Привет народ! Занимаюсь изучением Java, захотелось реализовать выборку случайных чисел для лотереи. Вроде бы все прописал и программа даже...

Игра "Змейка": советы по улучшению кода
Всем здрасте :) Только что зарегистрировался на форуме. Начал изучать программирование и c# где-то месяца полтора назад и вот сделал свою...

Советы по улучшению сброки
Вот ссылка https://www.dns-shop.ru/conf/9388f4fd753dc0d3/

советы по улучшению юзабилити
Привет, я совсем нуб в дизайне и почти нуб вюзабилити. Веду свой блог exp-seo.ru. Из-за замыленности взгляда, уже не могу адекватно оценить...

Нужны советы по улучшению чата
выкладываю свой проект,очень прошу помочь по вопросам 1 - form2.BitBtn3 и form2.BitBtn2 по каким то причинам не работают,не понимаю по...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru