#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]