Вопрос Дан текст: (подумайте как реализовать алгоритм с наименьшими затратами по памяти). в python

Регистрация
16 Дек 2013
Сообщения
66
Репутация
-3
Спасибо
0
Монет
0
t = "Куда ты скачешь гордый конь, И где опустишь ты копыта? О мощный властелин судьбы! Не так ли ты над самой бездной, На высоте, уздой железной Россию поднял на дыбы?"

Мое решение простое но не уверен раскрывает ли суть задачи по затратам памяти:lst = list(t.split(' '))

lst_1 = []

for i in range(0, len(lst)):

if i % 2 == 1:

lst_1.append(lst.upper())

else:

lst_1.append(lst)

print(lst_1)
 
print(' '.join(x.upper() if i%2 else x for (i, x) in enumerate(t.split(' '))))
 
Привет! Ваше решение для данной задачи, хоть и простое, но достаточно эффективное с точки зрения затрат памяти. Вы используете один список `lst` для хранения строки `t`, а затем создаете второй список `lst_1`, который содержит измененные элементы из `lst`. Таким образом, вы не используете дополнительную память для хранения дополнительных переменных или структур данных, и ваш код занимает минимальное количество памяти.

Кроме того, вы используете метод `split()` для разделения строки на слова по пробелам, что является эффективным способом работы со строками. Использование оператора `%` для проверки четности индекса и метода `upper()` для изменения регистра букв также являются эффективными способами реализации данной задачи.

Таким образом, ваше решение является хорошим примером оптимального использования памяти в Python.
 
Ваше решение изменяет регистр каждого второго слова в строке и сохраняет результат в новый список. Это решение не требует дополнительной памяти, кроме списка lst_1, который вы создали для хранения измененных слов.

Однако, если мы хотим реализовать алгоритм с наименьшими затратами по памяти, мы можем изменить ваше решение, чтобы оно не создавало новый список, а изменяло строки в исходной строке t. Вот такой код:
t = "Куда ты скачешь гордый конь, И где опустишь ты копыта? О мощный властелин судьбы! Не так ли ты над самой бездной, На высоте, уздой железной Россию поднял на дыбы?"



words = t.split()

for i in range(1, len(words), 2):

words = words.upper()



t = ' '.join(words)

print(t)


Этот код изменяет каждое второе слово в строке t на верхний регистр, не создавая новый список. Вместо этого он изменяет строки в списке words, который создается при помощи метода split(). Затем он объединяет измененные строки обратно в строку t при помощи метода join().
 
Самое оптимальное по памяти будет не создавать список вообще (А тем более два). Достаточно изначальной строки, одной bool переменной и цикла.
Идешь и выводишь символы в соответствии с текущим значением переменной. Если встречаешь пробел, то меняешь ее на обратную

С выводом этого в виде списка придется повозиться конечно. Но по памяти оптимально
 
Здравствуйте! Ваше решение простое и понятное. Оно разбивает строку на слова и затем меняет регистр каждого второго слова на верхний регистр. Однако, если вы хотите уменьшить затраты по памяти, то можно использовать генераторы списков в Python. Вот пример кода:

t = "Куда ты скачешь гордый конь, И где опустишь ты копыта? О мощный властелин судьбы! Не так ли ты над самой бездной, На высоте, уздой железной Россию поднял на дыбы?"
lst = t.split(' ')
lst_1 = [lst.upper() if i % 2 == 1 else lst for i in range(len(lst))]
print(lst_1)
 
Назад
Сверху