web-dev-qa-db-ja.com

Pythonでリストの最後の要素を取得する

Pythonでは、どのようにしてリストの最後の要素を手に入れますか?

1680
Janusz

some_list[-1]は最短で最もPythonicです。

実際、この構文でもっと多くのことができます。 some_list[-n]構文は、最後からn番目の要素を取得します。そのため、some_list[-1]は最後の要素を取得し、some_list[-2]は最後から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は例外を発生させます。空のリストには最後の要素を含めることができないからです。

2608
Sasha Chedygov

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オブジェクトを返すことは、例外オブジェクトよりも「最後の要素」に近いということです。

213
DevPlayer

次のこともできます。

alist.pop()

pop()メソッドは最後の要素を削除するので、それはあなたのリストで何をしたいのかに依存します。

79
Taurus Olson

Pythonで最後の要素を表示する最も簡単な方法は、

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

そのような目的を達成するための他の多くの方法がありますが、これらは短くて使いやすいです。

61
Atul Arvind

Pythonでは、リストの最後の要素をどのように取得しますか?

最後の要素を取得するには、

  • リストを変更せずに、
  • リストを知っていると仮定has最後の要素(つまり空ではない)

-1を添え字表記に渡します。

>>> a_list = ['zero', 'one', 'two', 'three']
>>> a_list[-1]
'three'

説明

インデックスとスライスは、負の整数を引数として取ることができます。

例を変更しました ドキュメントから 各インデックスが参照するシーケンス内のアイテムを示します。この場合、文字列"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'

反復可能な開梱による割り当て

このメソッドは、最後の要素を取得するだけの目的で2番目のリストを不必要に具体化する場合がありますが、完全性のために(およびリストだけでなく反復可能なすべてをサポートしているため):

>>> *head, last = a_list
>>> last
'three'

変数名、headは、不要に新しく作成されたリストにバインドされます。

>>> head
['zero', 'one', 'two']

あなたがそのリストで何もしないつもりなら、これはより適切です:

*_, last = a_list

または、実際に、それがリストであることを知っている場合(または少なくとも添字表記を受け入れる場合):

last = a_list[-1]

関数内

コメント者は言った:

Pythonには、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ループ

Pythonの機能として、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'

これを行うのは

  • リストに要素が含まれていることを知っているか、例外が空の場合に例外を処理する準備ができている
  • リストから最後の要素を削除して、スタックのように扱うつもりです。

これらは有効なユースケースですが、あまり一般的ではありません。

残りのために残りを保存します:

なぜあなたがそれをするのかわかりませんが、完全を期すために、reversediteratorを返すため、 (イテレータプロトコルをサポートしています)結果を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
41
Aaron Hall
mylist = [ 1 , 2 , 3 , 4 , 5]

#------------------------------------
# Method-1 : Last index
#------------------------------------

print(mylist[-1])


#------------------------------------
# Method-2 : Using len 
#------------------------------------

print(mylist[len(mylist) - 1])


#------------------------------------
# Method-3 : Using pop, pop will remove the last 
#            element from the list.
#------------------------------------

print(mylist.pop())
11
Fuji Komalan

get listの最後の値だけを使いたい場合は、次のようにします。

your_list[-1]

_ but _ もし get valueそして remove itをリストから使いたいのであれば:

your_list.pop()

または: あなたもインデックスでポップすることができます...

your_list.pop(-1)
10
a_m_dev

some_list = [1、2、3]

方法1:

some_list[-1]

方法2:

**some_list.reverse()** 

**some_list[0]**

方法3:

some_list.pop() 
9
Sanjay Pradeep

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

list[-1]はリストを変更せずにリストの最後の要素を取得します。 list.pop()はリストの最後の要素を検索しますが、元のリストを変更/変更します。通常、元のリストを変更することはお勧めできません。

あるいは、何らかの理由でPythonicよりも小さいものを探しているのなら、リストが空でないと仮定してlist[len(list)-1]を使うことができます。

それでは、items[len(items) - 1]というほぼすべての言語で共通のことはどうでしょうか。これはIMOが最後の要素を取得するための最も簡単な方法です。なぜなら Pythonic knowledgeは必要ないからです。

5

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

リストが空のときにIndexErrorを取得したくない場合は、以下のコードを使用することもできます。

next(reversed(some_list), None)
1
Yavuz Mester