Как я могу удалить определенную ячейку с помощью .remove() в python

#python

#python

Вопрос:

Допустим, у меня есть список, который выглядит следующим образом

 f = [['person','place','item'],['george','home','phone']]
 

как мне выполнить поиск по этому списку и удалить определенную ячейку с помощью f.remove()
Я пробовал:

 f.remove('item')
 

который должен быть удален 'item' , но вместо этого возвращает ошибку

 Exception has occurred: ValueError
list.remove(x): x not in list
 

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

1. f[0].remove('item')

2. Вы также хотите удалить соответствующий элемент в каждом из списков?

3. Кроме того, я предлагаю вам ознакомиться со словарями. Они представляют собой гораздо лучшую структуру, когда вы хотите пометить значения именем.

4. @SeaverOlson Я предлагаю вам проверить, csv.DictWriter что записывает список dicts в файл CSV.

5. Кроме того, принятый ответ является правильным, только если вы хотите заменить всю первую строку на None .

Ответ №1:

у вас есть список списков, если вы хотите удалить элемент из 1-го списка, вам следует поступить следующим образом:

 f[0].remove('item') 
 

.remove() это inplace операция и не возвращает никакого значения. т.е. Это изменит сам список, поэтому после приведенной выше операции ваш список будет:

 print(f)

# output [['person', 'place'], ['george', 'home', 'phone']]
 

для второго списка:

 f[1].remove('home') 
 

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

1. list.remove(‘val’) может привести к ValueError . Решение для OP должно быть полным. Можете ли вы использовать оператор try:except или if, чтобы убедиться, что это не приведет к исключительной ситуации.

Ответ №2:

Для этого вы можете использовать понимание списка. Вам нужно поместить оператор if во внутренний цикл.

 f = [['person','place','item'],['george','home','phone']]

f = [[a for a in x if a != 'item'] for x in f]
 

Результатом этого будет:

 [['person', 'place'], ['george', 'home', 'phone']]
 

Это эквивалентно:

 f = [['person','place','item'],['george','home','phone']]
new_f = []
for x in f:
    temp_list = []
    for a in x:
        if a != 'item':
            temp_list.append(a)
    new_f.append(temp_list)
print (new_f)
 

Выходные данные обоих будут одинаковыми.

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

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

2. Это решение будет работать независимо от того, существует ли значение в исходном списке или нет. Например, если мы заменим item на apple , он напечатает полный список, apple которого нет в списке. С list.remove('apple') помощью, вам нужно решить для ValueError

Ответ №3:

Вы пробовали это?

 f[0].remove('item')
 

Ответ №4:

Вы можете сделать это легко, используя понимание списка

 f=[x.remove('item')  if 'item' in x else x for x in f]
 

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

1. x.remove(‘item’) вернет значение None . Таким образом, вы НЕ получите желаемого результата. вам нужно отправить все значения x, кроме item

Ответ №5:

В вашем примере f это двумерный список, поэтому все элементы в f нем также являются списками, а item не одним из них. В зависимости от вашего варианта использования я вижу несколько способов интерпретации «удалить»:

Если вы хотите, чтобы ваш результирующий список был [['person','place'],['george','home','phone']] , вы можете использовать

 f[0].remove('item')
 

Если вы хотите, чтобы ваш результирующий список был [['person','place'],['george','home']] (т. Е. Удалял весь «столбец» из 2D-списка), то сначала вам следует найти индекс, который вы хотите удалить, а затем использовать del на основе индекса:

 index = f[0].index('item')
for row in f:
  del row[index]