파이썬에서는리스트의 마지막 요소를 어떻게 얻습니까?
답변
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]