Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Cheshires
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 28
#1

Ускорение работы программы - Python

21.10.2015, 00:02. Просмотров 405. Ответов 10
Метки нет (Все метки)

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
import time
t1 = time.clock()
mas = []
mas1 = []
mas2 = []
with open('input.txt', 'r') as inp:
    n = int(inp.readline().strip())
    for i in range(n):
        mas1.append(inp.readline().strip())
    m = int(inp.readline().strip())
    print (mas1)
    for i in inp:
        print (i)
       if i in mas1:
            mas.append(i.strip())
            print ('blo')
        else:
            mas2.append(i.strip())
with open('output.txt', 'w') as out:
    out.write('Friends:')
    for i in range(n-2):
        out.write(' '+mas1[i]+',')
    out.write(' '+mas1[i+1]+'\n')
    out.write('Mutual Friends:')
    for i in range(len(mas)):
        out.write(' '+mas[i]+',')
    out.write ('\n')
    out.write('Also friend of:')
    for i in range(len(mas2)-1):
        out.write(' '+mas2[i]+',')
    out.write(' '+mas2[i+1])
print (mas1)
print (mas)
print (mas2)
print (time.clock()-t1)
1)Почему не работают корректно строчки с 12 по 18? (mas, не хочет заполняться не при каких условиях!)
2)И можно ли как-нибудь ускорить эту программу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2015, 00:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ускорение работы программы (Python):

Как проверять время работы программы?
Как можно проверять время работы программы на Python? Может есть какой-нибудь...

Можно ли ускорить время работы программы? Python
Алёна отправляется в долгожданный заслуженный отпуск. Алёна очень боится...

Как двоичный код влияет на скорость работы программы?
Если Python не создаёт машинный двоичный код некоторые программы на языке...

Ускорение обработки файла
Здравствуйте, я пишу программу для исправления орфографических ошибок в тексте....

Разборка работы с файлами и реализация программы
Всем привет. Пишу бота в телеграм. Задача у бота такая: пользователь вводит...

Ускорение работы программы
Добрый день. мне необходима помощь в пересмотре кода. Требуется ускорение...

10
Marinero
Модератор
Эксперт NIX
1967 / 1636 / 558
Регистрация: 02.03.2015
Сообщений: 5,339
21.10.2015, 00:07 #2
1. Что именно Вы хотите получить
2. Где пример input.txt ?
0
Cheshires
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 28
21.10.2015, 00:23  [ТС] #3
Вот условие: http://acm.dvpion.ru/index.asp?main=task&id_task=56
input:
3
vasya-pupkin
bill-hates
ivan-ivanov
2
vasya-pupkin
destroyer

output:
Friends: bill-hates, ivan-ivanov, vasya-pupkin
Mutual Friends: vasya-pupkin
Also Friend of: destroyer

Добавлено через 9 минут
Алгоритм:
1)Создаём список(mas1) из имён из первого "столбца"
2)Проверяем наличие во 2-ом "столбце" наличие имён из 1-ого "столбца"
3) а) Если имена совпадают, то записываем в один список(mas)
б) Иначе: записываем имена в в другой список (mas2)
4)Записываем данные в файл
0
Marinero
Модератор
Эксперт NIX
1967 / 1636 / 558
Регистрация: 02.03.2015
Сообщений: 5,339
21.10.2015, 00:46 #4
Лучший ответ Сообщение было отмечено Cheshires как решение

Решение

Алгоритм:
  1. читаем файл целиком с помощью readlines
  2. певый список = file_list[1:int(file_list[0])+1]
  3. читаем с file_list[int(a[0])+2:int(a[0])+2+int(a[int(a[0])+1])]
1
Cheshires
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 28
22.10.2015, 00:06  [ТС] #5
Подскажите, как уменьшить время записи данных в файл. Строка с 12 по 29.
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
with open('input.txt', 'r') as inp:
    file_list = inp.read().split()
list_1 = file_list[1:int(file_list[0])+1]
list_3 = file_list[int(file_list[0])+2:int(file_list[0])+2+int(file_list[int(file_list[0])+1])]
list_2 = list(set(list_1).intersection(set(list_3)))
list_1.sort()
list_2.sort()
list_3.sort()
for i in range(len(list_2)):
    if list_2[i] in list_3:
        list_3.remove(list_2[i])
with open('output.txt', 'w') as out:
    out.write('Friends:')
    if len(list_1) != 0:
        for i in range(int(file_list[0])-1):
            out.write(' '+list_1[i]+',')
        out.write(' '+list_1[-1]+'\n')
    else: out.write('\n')
    out.write('Mutual Friends:')
    if len(list_2) != 0:
        for i in range(len(list_2)-1):
            out.write(' '+list_2[i]+',')
        out.write(' '+list_2[-1]+'\n')
    else: out.write('\n')
    out.write('Also Friend of:')
    if len(list_1) != 0:
        for i in range(len(list_3)-1):
            out.write(' '+list_3[i]+',')
        out.write(' '+list_3[-1])
input:
3
vasya-pupkin
bill-hates
ivan-ivanov
2
vasya-pupkin
destroyer

output:
Friends: bill-hates, ivan-ivanov, vasya-pupkin
Mutual Friends: vasya-pupkin
Also Friend of: destroyer

Алгоритм записи в файл:
Я прогоняю каждый список(list_1 ; list_2; list_3) с помощью цикла for, исключая тот случай, когда данные отсутствуют.
0
Marinero
Модератор
Эксперт NIX
1967 / 1636 / 558
Регистрация: 02.03.2015
Сообщений: 5,339
22.10.2015, 11:37 #6
Цитата Сообщение от Marinero Посмотреть сообщение
с помощью readlines
Зачем писал? Читает сразу с переводами строк и потом не надо их добавлять при записи + записываете сразу весь список одной командой, а не каждую строчку перебираете — вот Вам и ускорение.
0
Cheshires
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 28
22.10.2015, 17:44  [ТС] #7
Честно говоря, ничего не понял.
0
Marinero
Модератор
Эксперт NIX
1967 / 1636 / 558
Регистрация: 02.03.2015
Сообщений: 5,339
22.10.2015, 18:39 #8
Команда такая
Python
1
file_list = inp.readlines()
0
Cheshires
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 28
22.10.2015, 18:47  [ТС] #9
Не в этом проблема XD
Проблема в том, что когда мы читаем весь файл через readlines, то все имена будут иметь приписку "\n", а значит, что при выводи у нас все имена будут в столбик, а не в строчку. И как я понял, всё это не будет иметь смысла, если я Вас правильно понял.
0
Marinero
Модератор
Эксперт NIX
1967 / 1636 / 558
Регистрация: 02.03.2015
Сообщений: 5,339
22.10.2015, 19:17 #10
Лучший ответ Сообщение было отмечено Cheshires как решение

Решение

Всё равно сначала соберите всё в 1 список/строку и запишите за 1 раз.
1
Cheshires
1 / 1 / 1
Регистрация: 20.10.2015
Сообщений: 28
23.10.2015, 21:53  [ТС] #11
Спасибо большое! Запись всего в одну строку ускорило программу и позволило пройти тесты )
0
23.10.2015, 21:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2015, 21:53
Привет! Вот еще темы с решениями:

Ускорение работы программы
Написал программу для РГР по Компьютерной геометрии и графике. Парсит файл типа...

Ускорение работы программы
доброго времени суток. Возникла следующая проблема: using System; using...

Оптимизация и ускорение работы программы
Здравствуйте, есть достаточно большая программа в которой используется большое...

Ускорение работы компьютера, а так же работы Интернета (u22)
Когда допустим, включаю компьютер, у меня очень долго стоит заставка "Добро...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru