목록의 마지막 요소를 어떻게 얻을 수 있습니까?
질문
목록의 마지막 요소를 어떻게 얻을 수 있습니까?
답변
some_list [-1]은 가장 짧고 가장 최적입니다.
실제로이 구문으로 더 많은 것을 할 수 있습니다.some_list [-n] 구문은 n 번째 - 마지막 요소를 가져옵니다.따라서 some_list [-1]은 마지막 요소를 가져옵니다. some_list [-2]는 마지막으로 두 번째로 두 번째로, etc.list [-len (some_list)]까지 모든 방법으로 모두 첫 번째 요소를 제공합니다.
이 방법으로 목록 요소를 설정할 수도 있습니다.예를 들어:
>>> some_list = [1, 2, 3]
>>> some_list[-1] = 5 # Set the last element
>>> some_list[-2] = 3 # Set the second to last element
>>> some_list
[1, 3, 5]
예상 항목이 존재하지 않으면 목록 항목을 인덱스별로 가져 오는 것은 인덱서를 발생시킵니다.즉, 빈 목록은 빈 목록이 마지막 요소를 가질 수 없기 때문에 일부 _list [-1]가 비어 있으면 예외가 발생합니다.
답변
STR () 또는 LIST () 오브젝트가 EART = ''또는 ALIST = []만큼 됨으로써 STR () 또는 LIST () 오브젝트가 비어있을 수 있다면, ALIST [-1] 대신 ALIST [-1 :] 대신 ALIST [-1 :]를 사용할 수 있습니다. "동일성".
이것의 중요성은 다음과 같습니다.
alist = []
alist[-1] # will generate an IndexError exception whereas
alist[-1:] # will return an empty list
astr = ''
astr[-1] # will generate an IndexError exception whereas
astr[-1:] # will return an empty str
비어있는 목록 개체 또는 빈 STR 객체를 반환하는 구별이있는 경우 예외 객체가 더 많은 "마지막 요소"로 더 많은 것입니다.
답변
당신은 또한 할 수 있습니다 :
last_elem = alist.pop()
POP () 메서드가 마지막 요소를 삭제하기 때문에 목록과 함께 할 작업에 따라 다릅니다.
답변
파이썬에서는 목록의 마지막 요소를 어떻게 얻을 수 있습니까?
마지막 요소를 얻으려면,
목록을 수정하지 않고, 그리고 목록에서 마지막 요소가 있다는 것을 알고 있다고 가정하면 (즉, 비 셉터가 아닙니다)
첨자 표기법에 -1 전달 :
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
설명
인덱스와 슬라이스는 부정적인 정수를 인수로 사용할 수 있습니다.
이 경우 각 인덱스 참조 문자열에서 "Python"문자열에서 -1은 마지막 요소 인 문자 (문자 "문자열을 나타 내기 위해 문서의 예제를 수정했습니다.
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
Iterable Unpacking을 통한 할당
이 방법은 마지막 요소를 얻는 목적으로 두 번째리스트를 불필요하게 구체화 할 수 있지만 완성을 위해서 (그리고뿐만 아니라 단순한 목록을 지원하지 않기 때문에) :
>>> *head, last = a_list
>>> last
'three'
변수 이름, 머리는 불필요한 새로 생성 된 목록에 바인딩됩니다.
>>> head
['zero', 'one', 'two']
그 목록으로 아무 것도하지 않으려는 경우 이것은 더 많은 apropos입니다.
*_, last = a_list
또는 정말로, 당신이 그것이 목록이라는 것을 알고있는 경우 (또는 적어도 첨자 표기법을 받아 들일 수 있음).
last = a_list[-1]
함수에서
해설자가 말했다 :
나는 파이썬이 first ()와 lisp ()와 같은 마지막 ()을 위해 함수가 있었으면 좋겠다. 그것은 불필요한 람다 함수를 많이 제거 할 것이다.
이것들은 정의가 매우 간단합니다.
def last(a_list):
return a_list[-1]
def first(a_list):
return a_list[0]
또는 operator.Itemgetter를 사용하십시오.
>>> import operator
>>> last = operator.itemgetter(-1)
>>> first = operator.itemgetter(0)
두 경우 모두 :
>>> last(a_list)
'three'
>>> first(a_list)
'zero'
특수한 상황들
더 복잡한 것을하고 있다면, 마지막 요소를 약간 다른 방식으로 얻는 것이 더 많은 성능을 찾을 수 있습니다.
프로그래밍에 대한 새로운 경우 알고리즘의 의미 론적으로 다른 부분을 서로 다른 부위로 연결하기 때문에이 섹션을 피해야합니다.알고리즘을 한 곳에서 변경하면 다른 코드 줄에 의도하지 않은 영향을 미칠 수 있습니다.
나는 할 수있는만큼 경고와 조건을 제공하려고 노력하지만, 나는 뭔가를 놓쳤을 것입니다.당신이 경고를 떠나는 것 같으면 코멘트를 겁니다.
썰기
목록의 조각은 새 목록을 새 목록에서 원하는 경우 -1에서 끝까지 끝까지 선택할 수 있습니다.
>>> a_slice = a_list[-1:]
>>> a_slice
['three']
목록이 비어 있으면 실패하지 않은 위쪽이 있습니다.
>>> empty_list = []
>>> tail = empty_list[-1:]
>>> if tail:
... do_something(tail)
인덱스에 액세스하려고 시도하는 것은 취급 해야하는 indexError를 발생시킨다.
>>> empty_list[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
그러나이 목적을 위해 슬라이스는 다음이 필요한 경우에만 이루어져야합니다.
새 목록이 생성되었습니다 이전 목록이 비어 있으면 새 목록이 비어야합니다.
루프를 위해
파이썬의 특징 으로서는 For Loop에 내부 범위가 없습니다.
목록에서 완전한 반복을 수행하는 경우 루프에 할당 된 변수 이름으로 마지막 요소가 계속 참조됩니다.
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
이것은 의미 론적으로 목록의 마지막 일이 아닙니다.이것은 의미 론적으로 이름, 항목이 바인딩 된 마지막 것입니다.
>>> def do_something(arg): raise Exception
>>> for item in a_list:
... do_something(item)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 1, in do_something
Exception
>>> item
'zero'
따라서 이것은 당신이
이미 반복되고 있습니다 루프가 완료되거나 오류로 인해 끊어 지거나 종료되지 않음을 알고 있지만, 그렇지 않으면 루프가 참조하는 마지막 요소가 가리 킵니다.
그것을 얻고 제거하십시오
마지막 요소를 제거하고 반환하여 원래 목록을 돌립니다.
>>> a_list.pop(-1)
'three'
>>> a_list
['zero', 'one', 'two']
그러나 이제 원래 목록이 수정됩니다.
(-1은 실제로 기본 인수이므로 list.pop은 인덱스 인수없이 사용할 수 있습니다).
>>> a_list.pop()
'two'
만약 만약
목록에는 요소가 있거나 비어있는 경우 예외를 처리 할 준비가되어있는 목록을 알고 있습니다. 목록에서 마지막 요소를 제거하여 스택처럼 처리 할 것입니다.
이들은 유효한 유용품이지만 매우 일반적이지는 않습니다.
나중에 나머지 리버스 저장 :
나는 당신이 그것을하는 이유를 모르지만, 완전성을 위해 반복자 (iterator 프로토콜을 지원하는) 반복자를 반환하기 때문에 다음과 같이 결과를 전달할 수 있습니다.
>>> next(reversed([1,2,3]))
3
그래서 그것은 이것의 반전을하는 것과 같습니다 :
>>> next(iter([1,2,3]))
1
그러나 나중에 리버스 반복자의 나머지 부분이 필요하지 않으면 이렇게 할 수있는 좋은 이유를 생각할 수 없습니다.
reverse_iterator = reversed([1,2,3])
last_element = next(reverse_iterator)
use_later = list(reverse_iterator)
그리고 지금:
>>> use_later
[2, 1]
>>> last_element
3
답변
파이썬에서 마지막 요소를 표시하는 가장 간단한 방법은 다음과 같습니다.
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
이러한 목표를 달성하는 다른 방법이 있지만 이들은 짧고 단맛이 좋습니다.
답변
아무도 아직 이걸 게시 한 이상한 것을 이상하게 생각합니다.
>>> l = [1, 2, 3]
>>> *x, last_elem = l
>>> last_elem
3
>>>
그냥 압축 해제.
출처:https://stackoverflow.com/questions/930397/how-do-i-get-the-last-element-of-a-list
최근댓글