[python] 값으로 목록 요소를 삭제하는 간단한 방법이 있습니까?

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)

그러나 이것을 수행하는 더 간단한 방법이 없습니까?



답변

목록에서 요소의 첫 항목을 제거하려면 list.remove다음을 사용하십시오 .

>>> a = ['a', 'b', 'c', 'd']
>>> a.remove('b')
>>> print(a)
['a', 'c', 'd']

요소의 모든 항목을 제거하지는 않습니다. 이를 위해 목록 이해력을 사용하십시오.

>>> a = [10, 20, 30, 40, 20, 30, 40, 20, 70, 20]
>>> a = [x for x in a if x != 20]
>>> print(a)
[10, 30, 40, 30, 40, 70]


답변

일반적으로 파이썬은 할 수없는 일을하도록 지시하면 예외를 throw하므로 다음 중 하나를 수행해야합니다.

if c in a:
    a.remove(c)

또는:

try:
    a.remove(c)
except ValueError:
    pass

예외는 예상하고 올바르게 처리하는 한 반드시 나쁜 것은 아닙니다.


답변

넌 할 수있어

a=[1,2,3,4]
if 6 in a:
    a.remove(6)

그러나 위의 목록에서 6을 2 번 검색해야하므로 제외하는 것이 더 빠릅니다.

try:
    a.remove(6)
except:
    pass


답변

치다:

a = [1,2,2,3,4,5]

모든 발생을 없애기 위해 파이썬에서 필터 기능을 사용할 수 있습니다. 예를 들어 다음과 같습니다.

a = list(filter(lambda x: x!= 2, a))

따라서의 모든 요소를 ​​유지합니다 a != 2.

항목 중 하나를 꺼내려면

a.remove(2)


답변

다음은 목록 이해없이 수행하는 방법입니다.

def remove_all(seq, value):
    pos = 0
    for item in seq:
        if item != value:
           seq[pos] = item
           pos += 1
    del seq[pos:]


답변

삭제할 값을 알고 있다면 간단한 방법이 있습니다 (어쨌든 생각할 수있는 것처럼 간단합니다).

a = [0, 1, 1, 0, 1, 2, 1, 3, 1, 4]
while a.count(1) > 0:
    a.remove(1)

당신은 얻을 것이다
[0, 0, 2, 3, 4]


답변

응용 프로그램에서 집합이 적용 가능한 경우 목록 대신 집합을 사용하는 것도 가능합니다.

데이터가 주문되지 않고 중복이 없으면 IE

my_set=set([3,4,2])
my_set.discard(1)

오류가 없습니다.

종종 목록은 실제로 정렬되지 않은 항목에 대한 편리한 컨테이너입니다. 목록에서 요소의 모든 발생을 제거하는 방법을 묻는 질문이 있습니다. 처음부터 속이기를 원하지 않으면 다시 한 번 세트가 편리합니다.

my_set.add(3)

위에서 my_set을 변경하지 않습니다.