Python에서 인덱스별로 목록에서 요소를 제거하려면 어떻게 하나요?
list.remove` 메서드를 찾았지만 마지막 요소를 제거하고 싶다고 가정하면 어떻게 해야 하나요? 기본 제거는 목록을 검색하는 것 같지만 검색을 수행하지 않으려는 것 같습니다.
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]
따라서 이 방법은 또한 매우 비효율적이며 깔의 바람직하지 않은 부작용은요 (특히 다른 변수의 경우 원래 목록으로 가리키십시오 여분이라일러라 객체에는 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.
Solaris. 다음은 미리 정의된:
a = range(10)
index = 3
지금까지 가장 효율적인 방법. 작동하잖아 모두가 객체에는 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
델 비해 효율성이 적다 할 때 사용되는 방법 및 내려받습니다 삭제된 항목.
코드:
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
가장 효율적인.
코드:
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' 와 '는 첫 번째 줄은 두 값을 로드중 글로벌 인덱스'.
스케쳐내 분리하십시오 포지셔닝하십시오 바뀌엇어요 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]]
또 다른 요소를 제거하는 방법을 (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' 의 요소는 인덱스화할 가리킵니다. 하나님이 너희가운데 목록에 해당 부분을 표시됨과 빈 목록 (' []'), 이러한 요소를 제거됩니다.
그냥 삭제할 항목을 검색할 수 있습니다. 실제로 단순해졌습니다. 예:
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
이 같은 소리를 you& doesn& # 39, t # 39, re apc® 열거합니다 도왔으매 I& 목록과 함께 # 39, ll 렉시한테서 이 파선-짧은. 팝 요소가 없는 요소를 제거하는 것이므로 이를 사용하려는 열거합니다 콩지름에 델, 해당. 마지막 요소에 대한 security. # 39 의 파이썬 it& 1" " -;
>>> test = ['item1', 'item2']
>>> test.pop(-1)
'item2'
>>> test
['item1']
이미 언급한 바와 같이, 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_<0:index_=len(list_)+index_
다시그것들을 패치합니다 거잖나. 그런데 이 아이디어를 것 같아 매우 다양하다. 흥미로운 어쨌든요 사고 실험 # 39, & # 39 는 proper& 선행돼야 할 것 같다. 이 방법으로 덮어쓰기/추가 () / 목록에 있는 것이다.
이미 언급한 이 목록에서 각 요소를 제거하는 방법 및 어떤 장점은 다른 방법이 있다. 하지만, 여러 요소를 일부 삭제하는 것은 잠재적으로 오류가 발생할 수 있다.
>>> 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]
사용할 수 있습니다, 하지만 난 이후 델 또는 pop 포지셔닝하십시오 인덱스할 슬라이스에, 델, 데이터 더 효과적으로 제어할 수 있게 사용자 지정할 수 있습니다.
예를 들어, 제거 할 수 있는 요소 목록 참조) 를 시작으로 한 후 델 '으로' 은 마지막 한 요소 제거 할 수 있는 마지막 슬라이스에 사용한 결과 '팝'.
>>> l = [1,2,3,4,5]
>>> del l[-1:]
>>> l
[1, 2, 3, 4]
>>> l.pop(-1)
4
>>> l
[1, 2, 3]
'제거' 의 파이썬 함수를 사용하면 됩니다. 다음과 같습니다.
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]