Я не понимаю, как удалять и добавлять имена в мой список в python 3.8

#python

#python

Вопрос:

Я действительно новичок в этом и нуждаюсь в некоторой помощи. Я пытаюсь удалить ‘al’ из моего dinner_list, а затем добавить ‘roger’ на его место.

 dinner_list = ['frank', 'carole', 'jimmy', 'al']
message = f"{dinner_list[0].title()} you are invited to join me for dinner on 9/9."
message1 = f"{dinner_list[1].title()} you are invited to join me for dinner on 9/9."
message2 = f"{dinner_list[2].title()} you are invited to join me for dinner on 9/9."
message3 = f"{dinner_list[3].title()} you are invited to join me for dinner on 9/9."

#print(message)
#print(message1)
#print(message2)
#print(message3)

print('Al cannot make it.')

del dinner_list[3]
dinner_list.append('roger')

print(message)
print(message1)
print(message2)
print(message3)
  

Ответ №1:

В Python доступно несколько методов, которые позволяют удалять элементы из списка.

remove() Метод удалит первый экземпляр значения в списке.

 list = [1, 2, 3, 1]
list.remove(1) # [2, 3, 1]
  

pop() Метод удаляет элемент с заданным индексом, а также возвращает удаленный элемент.

 numbers = [10, 20, 30, 40]
ten = numbers.pop(0)
print(ten) # 10
  

Вы также можете использовать del ключевое слово в Python, чтобы удалить элемент или фрагмент из списка.

 numbers = [50, 60, 70, 80]
del numbers[1:2]
print(numbers) # [50, 70, 80]
  

Еще один способ удаления элементов из списка — взять фрагмент списка, который исключает индекс или индексы элемента или элементов, которые вы пытаетесь удалить. Например, чтобы удалить первые два элемента списка, вы можете сделать

 list = list[2:]
  

Ответ №2:

F-строки не переоценивают себя постоянно. Они устанавливаются один раз и после этого не реагируют на изменения. Вы можете увидеть это здесь:

 n = [1]

string = f"{n}"
print(string)

n[0] = 2

print(string)
  

Это печатает:

 [1]
[1]
  

Если вы хотите, чтобы сообщения обновлялись, вам нужно сделать это вручную. Я бы обернул сообщение и напечатал код в функцию, а затем вызвал функцию:

 def print_messages():
    message = f"{dinner_list[0].title()} you are invited to join me for dinner on 9/9."
    message1 = f"{dinner_list[1].title()} you are invited to join me for dinner on 9/9."
    message2 = f"{dinner_list[2].title()} you are invited to join me for dinner on 9/9."
    message3 = f"{dinner_list[3].title()} you are invited to join me for dinner on 9/9."

    print(message)
    print(message1)
    print(message2)
    print(message3)

print_messages()

print('Al cannot make it.')

del dinner_list[3]
dinner_list.append('roger')

print_messages()
  

Есть гораздо более аккуратные способы сделать это с использованием списка, но это дает общее представление.

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

1. Спасибо, что объяснили это. Очень помогает.

Ответ №3:

Вы хотите list.remove , который принимает входные данные и удаляет их, если они присутствуют в списке. Таким образом, вам также не нужно беспокоиться об индексах.

 l = ['a', 'b', 'c']
l.remove('a')
  

l Тогда ['b', 'c'] список.

Ответ №4:

Эл уже удален, а Роджер добавлен в ваш список. Проблема в том, что вы устанавливаете message3 в начале, когда последний элемент списка все еще Al. И после того, как вы удалите Al из списка и добавите roger в список, это никак не повлияет на переменную message3. Я надеюсь, что это имеет смысл.

Ответ №5:

Ваш код успешно заменяет ‘al’ на ‘roger’, но строки сообщения были созданы до того, как al был заменен на roger, поэтому они не отражают изменения в вашем списке.

Кроме того, ваши строки del и append будут работать только в том случае, если список обедов состоит из четырех элементов, а al является последним элементом. Один из способов заменить ‘al’ на ‘roger’ для любого списка имен — это выполнить следующее:

 dinner_list = ['frank', 'carole', 'jimmy', 'al']
dinner_list[dinner_list.index('al')] = 'roger'

for guest in dinner_list:
    print (f"{guest} you are invited to join me for dinner on 9/9.")
  

.index() возвращает индекс первого вхождения ‘al’ в списке.