a = [1, 2, 3, 4]
b = a.index(6)
del a[b]
print(a)
Выше показана следующая ошибка:
Traceback (most recent call last):
File "D:\zjm_code\a.py", line 6, in <module>
b = a.index(6)
ValueError: list.index(x): x not in list
Так что я должен сделать это:
a = [1, 2, 3, 4]
try:
b = a.index(6)
del a[b]
except:
pass
print(a)
Но нет ли более простого способа сделать это?
except
- плохая практика . Используйтеexcept Exception
как минимум.Ответы:
Чтобы удалить первое вхождение элемента в списке, просто используйте
list.remove
:Имейте в виду, что он не удаляет все вхождения вашего элемента. Для этого используйте понимание списка.
источник
remove
O (n)?Обычно Python генерирует исключение, если вы скажете ему сделать что-то, чего он не может, поэтому вам придется сделать либо:
или:
Исключение не обязательно является плохой вещью, если вы ожидаете и обрабатываете его правильно.
источник
a.remove(c)
любом случае может произойти сбой, несмотря наif c in a
проверку (a
может быть изменен в другом потоке послеc in a
проверки, но передa.remove(c)
вызовом).try/except
или замки могут быть использованы, чтобы избежать состояния гонки.Ты можешь сделать
но выше надо искать 6 в списке 2 раза, так что попробуйте кроме как бы быстрее
источник
Рассматривать:
Чтобы убрать все вхождения, вы можете использовать функцию фильтра в Python. Например, это будет выглядеть так:
Таким образом, он сохранит все элементы
a != 2
.Чтобы вынуть один из предметов, используйте
источник
filter()
в другоеlist()
? Согласно инструкции, он уже возвращает список.Вот как это сделать на месте (без понимания списка):
источник
O(n*n)
излишне (сравните 1e6 и 1e12 - вы не хотите рисковать последним).while 1: L.remove(value)
и return onValueError
может хорошо работать с несколькимиvalue
s или небольшими списками в CPython.Если вы знаете, какое значение удалить, вот простой способ (так или иначе, насколько я могу подумать):
Ты получишь
[0, 0, 2, 3, 4]
источник
while 1 in a:
в качестве структуры цикла?O(n^2)
где понимание будетO(n)
.Другая возможность - использовать набор вместо списка, если набор применим в вашем приложении.
То есть если ваши данные не упорядочены и не имеют дубликатов, то
без ошибок.
Часто список - это просто удобный контейнер для элементов, которые на самом деле неупорядочены. Есть вопросы, спрашивающие, как удалить все вхождения элемента из списка. Если вы не хотите, чтобы дуплисы были в первую очередь, снова пригодится сет.
не меняет my_set сверху.
источник
Как указано в многочисленных других ответах,
list.remove()
будет работать, но бросить,ValueError
если элемент не был в списке. В python 3.4+ есть интересный подход к решению этой проблемы с использованием подавляющего контекстного менеджера :источник
Найти значение в списке и затем удалить этот индекс (если он существует) проще всего с помощью метода удаления списка:
Если вы делаете это часто, вы можете заключить это в функцию:
источник
Этот пример быстрый и удалит все экземпляры значения из списка:
источник
break
наexcept ValueError
.В одну строку:
иногда это полезно.
Еще проще:
источник
Если ваши элементы различны, тогда подойдет простая разница между наборами.
источник
Мы также можем использовать .pop:
источник
Перезаписать список, проиндексировав все, кроме элементов, которые вы хотите удалить
источник
С циклом for и условием:
И если вы хотите удалить некоторые, но не все:
источник
источник
Скажем, например, мы хотим удалить все 1 из x. Вот как я бы это сделал:
Теперь это практическое использование моего метода:
И это мой метод в одной строке:
Оба выдают это как вывод:
Надеюсь это поможет. PS, пожалуйста, обратите внимание, что это было написано в версии 3.6.2, поэтому вам может потребоваться настроить его для более старых версий.
источник
Может быть, ваши решения работают с целочисленными, но у меня не работает со словарями.
С одной стороны, удаление () не работает для меня. Но, возможно, это работает с основными типами. Я предполагаю, что приведенный ниже код также является способом удаления элементов из списка объектов.
С другой стороны, «del» тоже не работает должным образом. В моем случае, используя python 3.6: когда я пытаюсь удалить элемент из списка с помощью команды «for» с помощью команды «del», python изменяет индекс в процессе, и bucle останавливается раньше времени. Это работает, только если Вы удаляете элемент за элементом в обратном порядке. Таким образом, вы не изменяете индекс массива ожидающих элементов, когда проходите его
Затем я использовал:
где 'list' похож на [{'key1': value1 '}, {' key2 ': value2}, {' key3 ': value3}, ...]
Также Вы можете сделать больше pythonic используя перечисление:
источник
источник
Это удаляет все экземпляры
"-v"
из массиваsys.argv
и не выдает жалоб, если экземпляры не были найдены:Вы можете увидеть код в действии, в файле с именем
speechToText.py
:источник
это мой ответ, просто используйте время и для
источник