답변:
some_list[-1]
가장 짧고 가장 파이썬적인 것입니다.
실제로이 구문으로 더 많은 것을 할 수 있습니다. some_list[-n]
구문은 n 번째 - 투 - 마지막 요소를 가져옵니다. 따라서 some_list[-1]
마지막 요소를 some_list[-2]
가져오고 두 번째 요소를 마지막 요소로 가져옵니다 some_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]
IndexError
예상 항목이 존재하지 않는 경우 색인별로 목록 항목을 가져 오면가 발생 합니다. 이것은 비어있는리스트가 마지막 요소를 가질 수 없기 때문에 비어 some_list[-1]
있으면 예외 some_list
가 발생 한다는 것을 의미합니다 .
귀하의 경우 str()
또는 list()
객체가 너무 비어 끝나게 수 있습니다 astr = ''
또는 alist = []
, 당신은 사용 할 수 있습니다 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 객체를 반환하는 것이 예외 객체보다 "마지막 요소"와 유사하다는 점이 구별됩니다.
if len(my_vector) == 0 or my_vector[-1] != update_val
은 실행 가능한 패턴입니다. 그러나 그것은 확실히 세계적인 해결책은 아닙니다. None이 결과 인 구문 형태를 갖는 것이 좋을 것입니다
xs[-1] if xs else None
파이썬에서는리스트의 마지막 요소를 어떻게 얻습니까?
마지막 요소를 얻으려면
-1
아래 첨자 표기법으로 전달 하십시오.
>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'
인덱스와 슬라이스는 음수를 인수로 사용할 수 있습니다.
각 색인에서 참조하는 시퀀스의 항목 (이 경우 string ) 에서 마지막 요소 인 문자를 참조 하는 예제 를 수정했습니다 ."Python"
-1
'n'
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
>>> p = 'Python'
>>> p[-1]
'n'
이 방법은 마지막 요소를 얻기위한 목적으로, 그러나 완전성을 위해 (그리고 목록뿐만 아니라 반복 가능하기 때문에) 두 번째 목록을 불필요하게 구체화 할 수 있습니다.
>>> *head, last = a_list
>>> last
'three'
변수 이름 head는 불필요한 새로 작성된리스트에 바인드됩니다.
>>> head
['zero', 'one', 'two']
해당 목록을 사용하지 않으려는 경우이 방법이 더 좋습니다.
*_, last = a_list
또는 실제로 목록이라는 것을 알고 있다면 (또는 적어도 첨자 표기법을 받아들입니다) :
last = a_list[-1]
한 논평자는 말했다 :
파이썬이 Lisp처럼 first ()와 last ()를위한 함수를 가지길 원합니다. 불필요한 많은 람다 함수를 제거 할 것입니다.
이들은 정의하기가 매우 간단합니다.
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
루프파이썬의 특징으로서, for
루프 에서 내부 범위가 없습니다 .
이미 목록에 대해 전체 반복을 수행하는 경우 마지막 요소는 여전히 루프에 지정된 변수 이름으로 참조됩니다.
>>> def do_something(arg): pass
>>> for item in a_list:
... do_something(item)
...
>>> item
'three'
이것은 의미 적으로 목록에서 마지막이 아닙니다. 의미 상으로, 이름이 마지막 item
으로 바인딩 된 것입니다.
>>> 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'
이 경우에만
이것들은 유효한 사용 사례이지만 그리 일반적이지 않습니다.
왜 당신이 그것을할지는 모르겠지만 완전성을 reversed
위해 반복자 (반복자 프로토콜을 지원하는)를 반환하기 때문에 결과를 next
다음으로 전달할 수 있습니다 .
>>> 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
를 방지하려면 IndexError: list index out of range
다음 구문을 사용하십시오.
mylist = [1, 2, 3, 4]
# With None as default value:
value = mylist and mylist[-1]
# With specified default value (option 1):
value = mylist and mylist[-1] or 'default'
# With specified default value (option 2):
value = mylist[-1] if mylist else 'default'
lst[-1]
가장 좋은 접근 방법이지만 일반적인 반복 가능한 경우 다음을 고려하십시오 more_itertools.last
.
암호
import more_itertools as mit
mit.last([0, 1, 2, 3])
# 3
mit.last(iter([1, 2, 3]))
# 3
mit.last([], "some default")
# 'some default'
list[-1]
목록을 변경하지 않고 목록의 마지막 요소를 검색합니다.
list.pop()
목록의 마지막 요소를 검색하지만 원래 목록을 변경 / 변경합니다. 일반적으로 원본 목록을 변경하지 않는 것이 좋습니다.
또는 어떤 이유로 든 파이썬이 아닌 것을 찾고 있다면 list[len(list)-1]
목록이 비어 있지 않다고 가정 하여을 사용할 수 있습니다 .
좋아, 그러나 거의 모든 언어 방식에서 일반적인 것은 items[len(items) - 1]
어떻습니까? 이것은 pythonic 지식이 필요하지 않기 때문에 마지막 요소를 얻는 가장 쉬운 방법 입니다.
some_list[-1]
논리적 인 접근법이기 때문에 접근 방식보다 더 나은 것으로 some_list[-1]
생각 하고 실제로 내 의견 보다 더 잘하는 것을 보여줍니다 .
some_list.last
- 그것은 코드의 아름다운 라인이 될 것입니다