Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 1, 2016 01:41:58

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить элемент

Условие задачи:
Дан список из чисел и индекс элемента в списке k. Удалите из списка элемент с индексом k, сдвинув влево все элементы, стоящие правее элемента с индексом k.
Программа получает на вход список, затем число k. Программа сдвигает все элементы, а после этого удаляет последний элемент списка при помощи метода pop() без параметров.
Программа должна осуществлять сдвиг непосредственно в списке, а не делать это при выводе элементов. Также нельзя использовать дополнительный список. Также не следует использовать метод pop(k) с параметром.

 l = []
while len(l) != 6:
    n = int(input("Введите число = "))
    l.append(n)
print(l)
k = int(input("Введите число от 1 до 5 = "))
a = l[k]
l.remove(a)
l.append(a)
print(l.pop())
print(l)
Считаете ли Вы мое решение верным согласно условию? Если же нет - предложите свой вариант.

Офлайн

#2 Дек. 1, 2016 06:43:06

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Удалить элемент

мой вариант

 del a[k]
https://docs.python.org/3/tutorial/datastructures.html#the-del-statement
А тем кто пишет что следует использовать а что нет вежливо объясните что реально важно сколько времени выполняется код и сколько нужно памяти. пущай тоже головой подумают когда задания сочиняюта не в носу ковыряют.
Считаю ваше решение не соответствующим условию.
Где сказано что в списке должно быть ровно 5 элементов?
Задача может быть решенной только при наличии тестов. например для всех кобинаций таких входных
данных
 li=[1,2,3],[]  k=-1,0,1,2,3,"d"
https://docs.python.org/3/library/doctest.html



Отредактировано doza_and (Дек. 1, 2016 06:47:29)

Офлайн

#3 Дек. 1, 2016 09:04:08

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Удалить элемент

doza_and
Я не стану с Вами спорить однако данная задача имеет под собой определенный смысл
. Так что вполне себе вариант.




Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Дек. 1, 2016 09:13:20

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удалить элемент

Dorum
Считаете ли Вы мое решение верным согласно условию?
Как выше сказал комрад doza_and, постановщик задач у вас какой-то на своей волне. Если вас натаскивают на алгоритмы, то питон тут противоречивый выбор, был бы это Си - не возникало бы таких вопросов. Вероятно от вас хотят увидеть работу с массивом, то есть нужно именно перемещать вручную элементы правее k-го. Здесь вы не обойдетесь без len(l) - k присваиваний.



Офлайн

#5 Дек. 1, 2016 09:26:08

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить элемент

doza_and
В плане количества элементов списка все очень условно. Условием задачи мне не предоставляются входные данные. Если же закрыть глаза на количество - приемлемо решение? Ибо из-за витиеватости задачи не могу самолично ответить на этот вопрос. Необходимо независимый вердикт

Кстати, касаемо del тоже отличный вариант. Ибо не идет речи о том, что этот метод использовать запрещено.
Спасибо.

Отредактировано Dorum (Дек. 1, 2016 09:29:23)

Офлайн

#6 Дек. 1, 2016 09:32:46

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Удалить элемент

Мне кажется данная задача поставленна не на результат а как раз на выполнение условий.
так что пускай..



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Дек. 1, 2016 09:35:50

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить элемент

FishHook
Вероятно от вас хотят увидеть работу с массивом, то есть нужно именно перемещать вручную элементы правее k-го. Здесь вы не обойдетесь без len(l) - k присваиваний.

Именно это я и хотел понять. То есть я могу это осуществить путем именно прямого СДВИГА списка вправо пошагово? Пока еще не пришел к этому как, но это дело времени

Офлайн

#8 Дек. 1, 2016 09:40:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удалить элемент

Dorum
Пока еще не пришел к этому как
А что тут такого то? Каждому n-му элементу присваиваете значение (n+1)-го элемента, последний попаете (вам же прям так практически дословно в условии сказали).



Офлайн

#9 Дек. 1, 2016 12:06:58

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить элемент

FishHook
 l = []
while len(l) != 10:
    n = int(input("Введите 10 элементов списка = "))
    l.append(n)
print(l)
k = int(input("Индекс элемента, который будет удален = "))
for i in range(len(l)):
    if i == k:
        for a in range(k, len(l) - 1):
            l[a], l[a + 1] = l[a + 1], l[a]
print(l)
print("Удаленный элемент = ", l.pop())
print("Конечный список:", l)

Что скажите касаемо такого решения?

Офлайн

#10 Дек. 1, 2016 12:12:20

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удалить элемент

Dorum
Что скажите касаемо такого решения?
Очень плохо.

Вот это вот зачем?
 for i in range(len(l)):
    if i == k:

Вот это вот зачем? Нахрена вам обменивать значение двух элементов?
 l[a], l[a + 1] = l[a + 1], l[a]



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version