[python] 리스트의 마지막 요소 얻기

파이썬에서는리스트의 마지막 요소를 어떻게 얻습니까?



답변

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 객체를 반환하는 것이 예외 객체보다 “마지막 요소”와 유사하다는 점이 구별됩니다.


답변

당신은 또한 할 수 있습니다 :

alist.pop()

pop()메소드가 마지막 요소를 삭제 하므로 목록으로 수행하려는 작업에 따라 다릅니다 .


답변

파이썬에서 마지막 요소를 표시하는 가장 간단한 방법은

>>> list[-1:] # returns indexed value
    [3]
>>> list[-1]  # returns value
    3

그러한 목표를 달성하기위한 다른 많은 방법들이 있지만, 사용하기에는 짧고 달콤합니다.


답변

파이썬에서는리스트의 마지막 요소를 어떻게 얻습니까?

마지막 요소를 얻으려면

  • 목록을 수정하지 않고
  • 목록 에 마지막 요소 있다고 가정하면 (예 : 비어 있지 않음)

-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'


답변

다른 방법 :

some_list.reverse() 
some_list[0]