파이썬에서는 remove()
목록에서 처음 나타나는 값을 제거합니다.
목록에서 모든 값 을 제거하는 방법은 무엇입니까?
이것이 내가 생각한 것입니다.
>>> remove_values_from_list([1, 2, 3, 4, 2, 2, 3], 2)
[1, 3, 4, 3]
답변
기능적 접근 :
파이썬 3.x
>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter((2).__ne__, x))
[1, 3, 3, 4]
또는
>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter(lambda a: a != 2, x))
[1, 3, 3, 4]
파이썬 2.x
>>> x = [1,2,3,2,2,2,3,4]
>>> filter(lambda a: a != 2, x)
[1, 3, 3, 4]
답변
목록 이해를 사용할 수 있습니다.
def remove_values_from_list(the_list, val):
return [value for value in the_list if value != val]
x = [1, 2, 3, 4, 2, 2, 3]
x = remove_values_from_list(x, 2)
print x
# [1, 3, 4, 3]
답변
효율적인 목록 이해 (또는 생성기 표현식)를 사용하면서 원래 목록을 수정해야하는 경우 슬라이스 할당을 사용할 수 있습니다.
>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> x[:] = (value for value in x if value != 2)
>>> x
[1, 3, 4, 3]
답변
보다 추상적 인 방식으로 첫 번째 게시물의 솔루션을 반복합니다.
>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> while 2 in x: x.remove(2)
>>> x
[1, 3, 4, 3]
답변
간단한 해결책을보십시오
>>> [i for i in x if i != 2]
이것은 x
없는 모든 요소가있는 목록을 반환합니다2
답변
위의 모든 답변 (Martin Andersson의 경우 제외)은 원래 목록에서 항목을 제거하지 않고 원하는 항목없이 새 목록을 만듭니다.
>>> import random, timeit
>>> a = list(range(5)) * 1000
>>> random.shuffle(a)
>>> b = a
>>> print(b is a)
True
>>> b = [x for x in b if x != 0]
>>> print(b is a)
False
>>> b.count(0)
0
>>> a.count(0)
1000
>>> b = a
>>> b = filter(lambda a: a != 2, x)
>>> print(b is a)
False
목록에 대한 다른 참조가 있으면 중요 할 수 있습니다.
목록을 제자리에 수정하려면 다음과 같은 방법을 사용하십시오
>>> def removeall_inplace(x, l):
... for _ in xrange(l.count(x)):
... l.remove(x)
...
>>> removeall_inplace(0, b)
>>> b is a
True
>>> a.count(0)
0
속도와 관련하여 랩톱의 결과는 모두 1000 개의 항목이 제거 된 5000 개의 항목 목록에 있습니다.
- 목록 이해-~ 400us
- 필터-~ 900us
- .remove () 루프-50ms
따라서 .remove 루프는 약 100 배 더 느립니다. …… 흠, 다른 접근법이 필요할 수 있습니다. 내가 찾은 가장 빠른 것은 목록 이해를 사용하는 것이지만 원래 목록의 내용을 바꿉니다.
>>> def removeall_replace(x, l):
.... t = [y for y in l if y != x]
.... del l[:]
.... l.extend(t)
- removeall_replace ()-450us
답변
당신은 이것을 할 수 있습니다
while 2 in x:
x.remove(2)
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)