回答:
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
空である空のリストは最後の要素を持つことができないので、。
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
は実行可能なパターンです。しかし、それは確かにグローバルな解決策ではありません
xs[-1] if xs else None
Pythonで最後の要素を表示する最も簡単な方法は、
>>> list[-1:] # returns indexed value
[3]
>>> list[-1] # returns value
3
このような目標を達成する方法は他にもたくさんありますが、これらは短くて使いやすいものです。
list[-1]
はエラーになりますが、
a[-1:][0]
するの?a[-1]
とにかく彼も提供します。説明してください?
Pythonでは、リストの最後の要素をどのように取得しますか?
最後の要素を取得するには、
-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]
コメント者は言った:
Lispと同じように、Pythonに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か所で変更すると、別のコード行に意図しない影響を与える可能性があります。
私はできる限り注意と条件を提供しようと努めていますが、何かを見逃しているかもしれません。警告を残していると思われる場合はコメントしてください。
リストのスライスは新しいリストを返します。そのため、新しいリストの要素が必要な場合は、-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'
これを行うのは、
これらは有効なユースケースですが、あまり一般的ではありません。
なぜそうするのかはわかりませんが、完全を期すため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]
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'
わかりましたが、ほとんどすべての言語に共通することは何items[len(items) - 1]
ですか?これは、Pythonの知識を必要としないため、最後の要素を取得する最も簡単な方法です。
some_list[-1]
より論理的でありsome_list[-1]
、私の意見よりも実際にうまく機能していることを示しているため、いくつかの点でアプローチより優れていると思います。
some_list.last
-それは美しいコード行になるでしょう