인덱스별로 목록에서 요소를 제거하려면 어떻게 해야 하나요?

Python에서 인덱스별로 목록에서 요소를 제거하려면 어떻게 하나요?

list.remove` 메서드를 찾았지만 마지막 요소를 제거하고 싶다고 가정하면 어떻게 해야 하나요? 기본 제거는 목록을 검색하는 것 같지만 검색을 수행하지 않으려는 것 같습니다.

질문에 대한 의견 (10)
해결책

del`을 사용하여 삭제할 요소의 인덱스를 지정합니다:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del a[-1]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8]

슬라이스도 지원합니다:

>>> del a[2:4]
>>> a
[0, 1, 4, 5, 6, 7, 8, 9]

여기는 튜토리얼의 섹션입니다.

해설 (15)

아마도 '팝'을 원할 것입니다:

a = ['a', 'b', 'c', 'd']
a.pop(1)

# now a is ['a', 'c', 'd']

기본적으로 인수가 없는 pop은 마지막 항목을 제거합니다:

a = ['a', 'b', 'c', 'd']
a.pop()

# now a is ['a', 'b', 'c']
해설 (6)
    • 효율적인 방법으로 팝과 델 있다 이 같은 다른 항목을 제거하는 것을 언급한 의 색인입니다. 아직 그냥 생각해서라도 완료율 (이후 똑같은 조치를 취할 수 있는 다양한 방법을 통해 파이썬):
  • Flexlm용 슬라이스에 (이 자리에 수행하지 않습니다 제거 품목 오리지널 목록)

(또한 이 적립율은 가장 효율적인 방법을 사용하여 작업할 때 파이썬 목록*.직렬 하지만 이게 유용할 (단, 효율적인, 난 다시) 작업할 때 사용자 정의 객체에는 팝, 아직 지원하지 않는 못하며창조된 정의하시려면 'getitem').

>>> a = [1, 2, 3, 4, 5, 6]
>>> index = 3 # Only positive index

>>> a = a[:index] + a[index+1 :]
# a is now [1, 2, 3, 5, 6]
  • Note:* 이 방법을 유념하십시오 목록에 'like' 팝 '와' 델 수정하십시오 배치하십시오 않습니다. 대신 바라는 복제본에 목록 (그 중 한 명은 시작 전까지 인덱스화할 하지만 그것 없이는 ('는 [인덱스화할]') 와 한 후 인덱스화할 인도되니 마지막 요소 ([인덱스화할 + 1:] 'a') 와 추가하기만 객체에는 모두 새로운 목록을 만듭니다. 그런 다음 목록에 재할당되거나 변수 ('a'). 이전 목록 및 업그레이드됨 쓰레기요 수집됩니다 객체인지 업그레이드됨 역참조되었습니다. (원래 목록으로 객체에는 이외의 모든 변수를 참조됨 제공한 아니다).

따라서 이 방법은 또한 매우 비효율적이며 깔의 바람직하지 않은 부작용은요 (특히 다른 변수의 경우 원래 목록으로 가리키십시오 여분이라일러라 객체에는 un 수정되었음).

이 덕분에 @MarkDickinson 대한 지적이 나온다.

[이] (https://stackoverflow.com/a/509295/3244627) 스택 오버플로입니다 오토메이티드 总监和首席信息官完全了解 슬라이싱 설명합니다.

또한 이 양수입니다 지수 함께 사용할 수 있습니다.

이 방법을 사용하는 동안 오브젝트에도 getitem 함께 합니다 '' 이 '' 정의하십시오 무엇보다도 add 메서드로부터 정의하십시오 반환되기를 피연산자로 모두에서 항목이 포함된 객체를 합니다.

즉, 다음과 같은 클래스 정의가 어떠한 물체라도 함께 사용할 수 있습니다

class foo(object):
    def __init__(self, items):
        self.items = items

    def __getitem__(self, index):
        return foo(self.items[index])

    def __add__(self, right):
        return foo( self.items + right.items )

'방법' 이 '목록' 수행됨 정의하는 getitem '와' add.

  • Efficiency:* 세 가지 면에서 비교

Solaris. 다음은 미리 정의된:

a = range(10)
index = 3
  • [인덱스화할] '이' 델 객체에는 method:*

지금까지 가장 효율적인 방법. 작동하잖아 모두가 객체에는 del 'a' 로 정의하는 방법이다.

해체 다음과 같습니다.

코드:

def del_method():
    global a
    global index
    del a[index]

해체.

 10    0 LOAD_GLOBAL     0 (a)
       3 LOAD_GLOBAL     1 (index)
       6 DELETE_SUBSCR   # This is the line that deletes the item
       7 LOAD_CONST      0 (None)
      10 RETURN_VALUE
None
  • '팝' method:*

델 비해 효율성이 적다 할 때 사용되는 방법 및 내려받습니다 삭제된 항목.

코드:

def pop_method():
    global a
    global index
    a.pop(index)

해체.

 17     0 LOAD_GLOBAL     0 (a)
        3 LOAD_ATTR       1 (pop)
        6 LOAD_GLOBAL     2 (index)
        9 CALL_FUNCTION   1
       12 POP_TOP
       13 LOAD_CONST      0 (None)
       16 RETURN_VALUE
  • Method.* 슬라이스에 및 추가

가장 효율적인.

코드:

def slice_method():
    global a
    global index
    a = a[:index] + a[index+1:]

해체.

 24     0 LOAD_GLOBAL    0 (a)
        3 LOAD_GLOBAL    1 (index)
        6 SLICE+2
        7 LOAD_GLOBAL    0 (a)
       10 LOAD_GLOBAL    1 (index)
       13 LOAD_CONST     1 (1)
       16 BINARY_ADD
       17 SLICE+1
       18 BINARY_ADD
       19 STORE_GLOBAL   0 (a)
       22 LOAD_CONST     0 (None)
       25 RETURN_VALUE
None

참고: 기본적으로 '없음' 이 세 가지 모두 분해 무시하시겠습니까 복귀하십시오 마지막 두 줄이 있다. 'A' 와 '는 첫 번째 줄은 두 값을 로드중 글로벌 인덱스'.

해설 (6)

pop은 목록에서 항목을 제거하여 보관할 때도 유용합니다. 여기서 del은 실제로 항목을 삭제합니다.

>>> x = [1, 2, 3, 4]

>>> p = x.pop(1)
>>> p
    2
해설 (0)

하고 싶은 일 따라 달라집니다.

스케쳐내 요소를 제거한 반환되기를 사용하여 '팝 ()'.

>>> l = [1, 2, 3, 4, 5]
>>> l.pop(2)
3
>>> l
[1, 2, 4, 5]

그러나 싶은 요소를 삭제하시겠습니까 사용하여 '델':

>>> l = [1, 2, 3, 4, 5]
>>> del l[2]
>>> l
[1, 2, 4, 5]

또한 '델' 슬라이스에 사용할 수 있습니다. (예를 들어 '델 [2:]').

해설 (0)

일반적으로 다음과 같은 방법을 사용하여, 나는.

>>> myList = [10,20,30,40,50]
>>> rmovIndxNo = 3
>>> del myList[rmovIndxNo]
>>> myList
[10, 20, 30, 50]
해설 (0)

스케쳐내 분리하십시오 포지셔닝하십시오 바뀌엇어요 2th 같은 특정 요소에 3th, 7 일. # 39 는 can& 사용할 수 있습니다.

del my_list[2]
del my_list[3]
del my_list[7]

이후 두 번째 요소를 삭제한 후 세 번째 요소 요소에 실제로 4 는 원래 목록으로 삭제할 수 있습니다. 원래 목록으로 2th 필터링합니다 3th 7 일 수 있습니다, 요소에 새로운 목록을 가지고 와 마찬가지로 다음과 같습니다.

new list = [j for i, j in enumerate(my_list) if i not in [2, 3, 7]]
해설 (0)

또 다른 요소를 제거하는 방법을 (s) 를 통해 바뀌엇어요 색인입니다.

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# remove the element at index 3
a[3:4] = []
# a is now [0, 1, 2, 4, 5, 6, 7, 8, 9]

# remove the elements from index 3 to index 6
a[3:7] = []
# a is now [0, 1, 2, 7, 8, 9]

[x: y] 는 'x' 를 'y 1' 의 요소는 인덱스화할 가리킵니다. 하나님이 너희가운데 목록에 해당 부분을 표시됨과 빈 목록 (' []'), 이러한 요소를 제거됩니다.

해설 (0)

그냥 삭제할 항목을 검색할 수 있습니다. 실제로 단순해졌습니다. 예:

    letters = ["a", "b", "c", "d", "e"]
    letters.remove(letters[1])
    print(*letters) # Used with a * to make it unpack you don't have to (Python 3.x or newer)

출력: c d e

해설 (1)

다음과 같은 코드를 사용하여 지루려면 목록에서 요소를:

list = [1, 2, 3, 4]
list.remove(1)
print(list)

output = [2, 3, 4]

스케쳐내 지루려면 목록에서 데이터를 사용하여 색인 요소:

list = [1, 2, 3, 4]
list.remove(list[2])
print(list)
output : [1, 2, 4]
해설 (2)

이 같은 소리를 you& doesn& # 39, t # 39, re apc® 열거합니다 도왔으매 I& 목록과 함께 # 39, ll 렉시한테서 이 파선-짧은. 팝 요소가 없는 요소를 제거하는 것이므로 이를 사용하려는 열거합니다 콩지름에 델, 해당. 마지막 요소에 대한 security. # 39 의 파이썬 it& 1&quot " -;

>>> test = ['item1', 'item2']
>>> test.pop(-1)
'item2'
>>> test
['item1']
해설 (1)
  • l - list of values; 우리는 indexe 지루려면 inds2rem 충스러웠으니 * 목록.
l = range(20)
inds2rem = [2,5,1,7]
map(lambda x: l.pop(x), sorted(inds2rem, key = lambda x:-x))

>>> l
[0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
해설 (1)

이미 언급한 바와 같이, best practice 는 델 (); 팝 () 또는 할 경우 가치를 알고 있습니다.

해결 방법은 다시 스택 대체 요소만 운영까지도:

    a = ['a', 'b', 'c', 'd'] 

    def remove_element(list_,index_):
        clipboard = []
        for i in range(len(list_)):
            if i is not index_:
                clipboard.append(list_[i])
        return clipboard

    print(remove_element(a,2))

    >> ['a', 'b', 'd']

eta: 온데간데없군. 제외어 인덱스화할 값뿐만 있겠느뇨 및 업데이트하려면 가 작동하지 않을 것입니다

인 것 같군


if index_
해설 (1)

&Quot 사용하여, del&quot, 기능:

del listName[-N]

예를 들어, 마지막 3 개 항목은 지루려면 스케쳐내 코드에 합니다.

del listName[-3:]

예를 들어, 마지막 8 개 항목에 지루려면 스케쳐내 코드에 합니다.

del listName[-8:]
해설 (1)

아니면 여러 indexe 제거해야 합니다.

print([v for i,v in enumerate(your_list) if i not in list_of_unwanted_indexes])

물론 다음 할 수도 있다.

print([v for i,v in enumerate(your_list) if i != unwanted_index])
해설 (1)

이미 언급한 이 목록에서 각 요소를 제거하는 방법 및 어떤 장점은 다른 방법이 있다. 하지만, 여러 요소를 일부 삭제하는 것은 잠재적으로 오류가 발생할 수 있다.

>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in indices:
...     del l[i]
... 
>>> l
[0, 1, 2, 4, 5, 6, 7, 9]

3 과 8 요소가 아닌 3 과 7) 의 원래 목록으로 분리되었는지 (그 중에 간추려졌다 나열하십시오 루프 (loop) 를 않았을 것이다. 대신 지수가 높은 여러 요소를 삭제하시겠습니까 확인표시를 안전하게 제거하려면 다음과 같은 첫 인덱스화할 합니다 (예:

>>> l = [0,1,2,3,4,5,6,7,8,9]
>>> indices=[3,7]
>>> for i in sorted(indices, reverse=True):
...     del l[i]
... 
>>> l
[0, 1, 2, 4, 5, 6, 8, 9]
해설 (0)

사용할 수 있습니다, 하지만 난 이후 델 또는 pop 포지셔닝하십시오 인덱스할 슬라이스에, 델, 데이터 더 효과적으로 제어할 수 있게 사용자 지정할 수 있습니다.

예를 들어, 제거 할 수 있는 요소 목록 참조) 를 시작으로 한 후 델 '으로' 은 마지막 한 요소 제거 할 수 있는 마지막 슬라이스에 사용한 결과 '팝'.

>>> l = [1,2,3,4,5]
>>> del l[-1:]
>>> l
[1, 2, 3, 4]
>>> l.pop(-1)
4
>>> l
[1, 2, 3]
해설 (0)

델 또는 pop 지루려면 목록에서 요소를 기반으로 인덱스화할 사용할 수 있습니다. 인쇄할 수 있는 반면, 멤버 구성 요소 목록 삭제 없이 제거하는 것은 팝 목록에서 인쇄면이 거잖나.

>>> a=[1,2,3,4,5]
>>> del a[1]
>>> a
[1, 3, 4, 5]
>>> a.pop(1)
 3
>>> a
[1, 4, 5]
>>> 
해설 (0)

'제거' 의 파이썬 함수를 사용하면 됩니다. 다음과 같습니다.

v = [1, 2, 3, 4, 5, 6]
v.remove(v[4]) # I'm removing the number with index 4 of my array
print(v) # If you want verify the process

# It gave me this:
#[1,2,3,4,6]
해설 (2)