Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 04.11.2021
Сообщений: 57
Записей в блоге: 1

Оптимизация кода Python, цикла for

05.01.2022, 20:37. Показов 2469. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я относительно недавно в программировании, подскажите как можно оптимизировать цикл for в Python 3.9
Код прилагаю в формате изображения png
Затратность на данный код получается колоссальный, т.к. список огромный

Также такой вопрос, если у меня есть значения списка list = [5672348, 4392345, ..., -342582], естественно символов около миллиона, как лучше поступить? оставить в списки или же как-нибудь иначе, например, {}
но как тогда это можно сделать, на примере данного кода.

Думал, что кодить умею, до тех пор пока не дошёл до оптимизации...
Миниатюры
Оптимизация кода Python, цикла for  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2022, 20:37
Ответы с готовыми решениями:

Python. Оптимизация кода
Здравствуйте всем! Я недавно начал заниматься питоном и во время решения одной из моих задач, столкнулся с проблемой. Код, слишком...

Оптимизация кода для GPU Python
Здравствуйте, проблема в том, что не получается оптимизировать под gpu, данный модуль кода основной, появилась видеокарта nvidia, хотелось...

Оптимизация кода при помощи цикла
Здравствуйте дорогие прогеры есть файл (приложил), в лист 1 справа необходимо проставить курсы из листа курсы за каждый день написал...

11
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.01.2022, 20:44
Цитата Сообщение от victoriumm Посмотреть сообщение
Код прилагаю в формате изображения png
Код надо прилагать в формате кода.
0
1 / 1 / 0
Регистрация: 04.11.2021
Сообщений: 57
Записей в блоге: 1
05.01.2022, 20:51  [ТС]
iSmokeJC, Это обязательное условие?
Просто код этот всё равно переделать необходимо

Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for x in list:
    maincheck = random.choice([False, True])
    xyz = ''.join([random.choice(pack_check) for _ in range(6 - len(str(x)))])
    qwe = ''.join([random.choice(pack_check) for _ in range(6 - len(str(x)))])
    if x >= 0:
        if maincheck:
            lost = f'{x}' + xyz
            last_list.append(lost)
        else:
            lost = f'{xyz}{x}'
            last_list.append(lost)
    else:
        if maincheck:
            lost = f'{x * -1}' + qwe
            last_list.append(lost)
        else:
            lost = f'{qwe}{x * -1}'
            last_list
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.01.2022, 20:51
Цитата Сообщение от victoriumm Посмотреть сообщение
Это обязательное условие?
1. Почитай Правила форума
2. Чтобы воссоздать твою проблему, предлагаешь всем желающим с картинки код набивать?
0
1 / 1 / 0
Регистрация: 04.11.2021
Сообщений: 57
Записей в блоге: 1
05.01.2022, 20:54  [ТС]
iSmokeJC, Точно, понял, спасибо. Буду знать
А вообще, как редактировать тему?
Не могу найти =(
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.01.2022, 20:55
да уже никак
0
1 / 1 / 0
Регистрация: 04.11.2021
Сообщений: 57
Записей в блоге: 1
05.01.2022, 22:55  [ТС]
Понял
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,752
05.01.2022, 23:13
Цитата Сообщение от victoriumm Посмотреть сообщение
pack_check
переменная не определена.
приводи полный код, который можно запустить. И импорты не забудь.
0
1 / 1 / 0
Регистрация: 04.11.2021
Сообщений: 57
Записей в блоге: 1
05.01.2022, 23:41  [ТС]
Я вас услышал, вот код рабочий. Суть в том, что работа с массивом огромная, для наглядности упростил, но этих данных больше во много раз.

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
from numpy import random
 
list = [4347, 1067, -3092, -7294, -10439, -12071, -12112, -10899, -9109, -7468, -6188, -5118, -4100, -3510, -3726, -4411, -4615, -3557, -1465, 667, 2177, 3301, 4484, 5731, 6591, 6776, 6464, 6156, 6135, -15501, -16769, -18439, -20594, -23248, -43, -927, -1454, -1662, -1912, -2446, -3308, -4342, -5294, -6196]
 
last_list = []
pack_check = ['1', '2', '3', '4', '5']
 
for x in list:
    maincheck = random.choice([False, True])
    xyz = ''.join([random.choice(pack_check) for _ in range(6 - len(str(x)))])
    qwe = ''.join([random.choice(pack_check) for _ in range(6 - len(str(x)))])
    if x >= 0:
        if maincheck:
            lost = f'{x}' + xyz
            last_list.append(lost)
        else:
            lost = f'{xyz}{x}'
            last_list.append(lost)
    else:
        if maincheck:
            lost = f'{x * -1}' + qwe
            last_list.append(lost)
        else:
            lost = f'{qwe}{x * -1}'
            last_list.append(lost)
 
print(last_list)
0
34 / 28 / 6
Регистрация: 23.06.2021
Сообщений: 145
06.01.2022, 01:54
victoriumm, подскажите, какую смысловую нагрузку несет код? Меня сбивает с толку random в maincheck. При таком раскладе смысл программы теряется. Пока упростил код для грамоты, а так, не думаю, что его имеет смысл упрощать.
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
from random import choice
 
list_ = [4347, 1067, -3092, -7294, -10439, -12071, -12112, -10899, -9109, -7468,
        -6188, -5118, -4100, -3510, -3726, -4411, -4615, -3557, -1465, 667,
        2177, 3301, 4484, 5731, 6591, 6776, 6464, 6156, 6135, -15501, -16769,
        -18439, -20594, -23248, -43, -927, -1454, -1662, -1912, -2446, -3308,
        -4342, -5294, -6196
]
last_list = []
pack_check = ['1', '2', '3', '4', '5']
 
 
for main_number in list_:
    maincheck = choice([False, True])
    first_part = ''.join([choice(pack_check) for number_ in range(6 - len(str(main_number)))])
    second_part = ''.join([choice(pack_check) for number_ in range(6 - len(str(main_number)))])
 
    lost = (
        f'{main_number}{first_part}' if main_number > -1 and maincheck
        else f'{first_part}{main_number}' if main_number > -1
        else f'{-main_number}{second_part}' if maincheck
        else f'{second_part}{-main_number}'
    )
 
    last_list.append(lost)
 
 
print(last_list)
1
1 / 1 / 0
Регистрация: 04.11.2021
Сообщений: 57
Записей в блоге: 1
06.01.2022, 09:42  [ТС]
Здесь имелось ввиду, что необходимо сделать генерацию псевдо последовательности, для этого был создан элемент maincheck
т.е. при каждом проходе – он либо 1, либо 0
и при данном условии меняются значения по разному либо в конец добавление, либо вперёд
т.е. есть число 456, если maincheck = 1 => 456'567' – в конец;
иначе '567'456
Это если вкратце
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
06.01.2022, 12:15
Лучший ответ Сообщение было отмечено victoriumm как решение

Решение

victoriumm,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np
 
list = [4347, 1067, -3092, -7294, -10439, -12071, -12112, -10899, -9109, -7468, -6188, -5118, -4100, -3510, -3726, -4411, -4615, -3557, -1465, 667, 2177, 3301, 4484, 5731, 6591, 6776, 6464, 6156, 6135, -15501, -16769, -18439, -20594, -23248, -43, -927, -1454, -1662, -1912, -2446] * 250000
n = len(list)
m = 6 # максимальное количество символов в числах list
print(f'{n:_d}')
 
a = np.array(list)
maincheck = np.random.randint(0,2,n).astype(bool)
 
tmp = np.ceil(np.log10(np.fabs(a)))
tmp1 = (np.where(a>0, m, m-1) - tmp)
b = np.power(10, tmp1).astype(int)
b1 = np.power(10, tmp).astype(int)
 
 
c = (np.random.randint(10**(m-1), 10**m, n)%b).astype(int)
cond = (c<b//10) & (c > 0)
c[cond] *= np.power(10, (tmp1[cond] - np.ceil(np.log10(c[cond]))).astype(int))
 
lost = np.where(maincheck, abs(a)*b + c, c*b1 + abs(a))
print(lost[:40])
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2022, 12:15
Помогаю со студенческими работами здесь

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона для функции 2*X12 - X1*X2 + 3*X22 -...

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока кода/отдельной функции или процедуры/программы...

Оптимизация цикла
Есть такой код: % Генерация точек в объеме N=20 for i=(1:N) pointx(i)=unifrnd(x_min,x_max,1,1); ...

Оптимизация цикла
Помогите, пожалуйста, оптимизировать цикл. Есть файл, в нем много текста. Надо вывести этот текст по абзацам и обработать (первые...

Оптимизация цикла
Здравствуйте! Организую перенос из SQL в Excel (сам эксель содержит ID), после чего по ID (в экселе) присваиваю ФИО (сама задача обширнее,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru