удаление среднего элемента или элементов из списка в python

#python

#python

Вопрос:

У меня есть этот код. Все в порядке, но он не выводит нужные значения. Я думаю, что что-то не так в вызове функции, но я не могу понять это. этот код удаляет средний элемент, если длина списка нечетная, или два средних элемента, если длина четная. Это код,

 One_Ten = [1,2,3,4,5,6,7,8,9,10]

def removeMiddle(data:list)-> list:
    index = 0
    size = len(data)
    index = size // 2


    if (size % 2 == 0 ):
        data = data[:index-1]   data[index 1:]


    if (size % 2 == 1):
        data.pop(index)

    return data

data = list(One_Ten)
removeMiddle(data)
print("After removing the middle element (s):why ", data)
  

таким образом, желаемый результат должен выглядеть как
[1,2,3,4,7,8,9,10]

Комментарии:

1. data = data[:index-1] data[index 1:] не изменяет переданный список. Он создает новый список; который вы затем return , но вы ничего не делаете со значением return ed.

2. но когда я печатаю (данные) прямо перед возвратом, он выводит правильные значения

3. Как @KarlKnechtel говорит, вам нужно что-то вроде result = removeMiddle(data) and print(result) . Кстати removeMiddle , и One_Ten не являются подходящими именами Python — вы окажете себе услугу, изучив соглашения об именовании Python на ранней стадии

4. data Внутренняя функция — это не та же переменная, data что и внешняя — у них одинаковое имя, и изначально они указывают на один и тот же список, но это меняется, когда вы переназначаете его в функции. data это просто имя для списка, и вы используете это имя дважды.

5. я только что выполнил data = removeMiddle(данные), и он напечатал ok. это нормально?

Ответ №1:

Вам просто нужно присвоить data ему новое значение,

 data = removeMiddle(data)
  

Ответ №2:

Кроме того, вы можете установить функцию на место, отредактировав первые условия

 if (size % 2 == 0):
    data.pop(index)
    data.pop(index-1)