Python - リストから最後のx要素を抽出する方法

Pythonリストの長さが指定された値(たとえば10)より大きい場合、そのリストの最後の10個の要素を新しいリストに抽出したいと思います。 これどうやってするの? len(my_list) - 10の違いを試してみました:new_list = [(len(my_list) - 10):]は動作しません

助言がありますか? 前もって感謝します

30
追加された 著者 Elias Zamaria,
「うまくいかない」とは、有効な障害の説明ではありません。
追加された 著者 hop,

4 答え

次のように簡単です:

my_list[-10:]
68
追加された
最初のリストが10要素未満である場合、この解決策はまだ完全なリストを生成することに言及することは重要です。例えば。 my_list = [1,2,3] の場合、 my_list [-10:] [1,2,3] と同じです。
追加された 著者 ovgolovin,

これは、長いリストを最大サイズに切り詰め、残りを新しいリストに入れる方法を示しています。それは正確にあなたが尋ねているものではありませんが、あなたが本当に望むものかもしれません:

>>> list1 = [10, 20, 30, 40, 50, 60, 70]
>>> max_size = 5
>>> list2 = list1[max_size:]
>>> list2
[60, 70]
>>> list1 = list1[:max_size]
>>> list1
[10, 20, 30, 40, 50]

これは、基本的には同じですが、最後から新しいリストを取って、あなたが尋ねているものにもっと似ています:

>>> list1 = [10, 20, 30, 40, 50, 60, 70]
>>> list2 = list1[:max_size]
>>> list2
[10, 20, 30, 40, 50]
>>> list2 = list1[-max_size:]
>>> list2
[30, 40, 50, 60, 70]
>>> list1 = list1[:-max_size]
>>> list1
[10, 20]
>>> 
14
追加された
@Benjamin:a)実際のインタラクティブな例が非常に役に立つことがあるという事実と、b)他の答えを見る前に私はこれに答え始めました。スタックオーバーフローのdownvotingの目的を完全に理解できませんでした。おめでとう、素晴らしい一日を!
追加された 著者 dkamins,
@ベンジャミン:P.S.将来の参照のために:「いつ投票を行うべきですか?あなたが深刻な、努力なしに費やされた投稿に出くわしたとき、または明らかに、おそらくは間違っている答えが出てきたら、あなたの下垂体を使用してください。 ( stackoverflow.com/privileges/vote-down
追加された 著者 dkamins,
既に2つの良い答えがありましたが、これはあまり追加しません。ダウン投票に申し訳ありません。
追加された 著者 Benjamin,
将来の参考のために:人々は異なる理由で投票を使用します。答えが健全な場合、私の下の投票は、
追加された 著者 Benjamin,
たぶん、ダウン投票のバッジがあるので、ベンジャミンはそれをしました。 :) @dkaminsそれについてはあまり心配しないでください。彼はマイナス投票(あなたの-2から離れて)の代理人に-1を得ました。
追加された 著者 ovgolovin,

The Python tutorial has a section how to use list slicing: http://docs.python.org/tutorial/introduction.html#lists

あなたの場合、それは書くほど簡単です:

 new_list = my_list[-10:]
10
追加された

実際には、あなたの質問のステートメントの下付き文字は完全に動作します - 自分でそれを試してみるときに、あなたが見ているエラーや予期しない結果を正確に貼り付けることができますか?あなたが提案した添え字がうまくいっています:

>>> my_list = list('abcdefghijklmnop')
>>> new_list = my_list[(len(my_list) - 10):]
>>> new_list
['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']

問題は単純にスライス表記の前に my_list という名前を付けるのを忘れてしまったか?

Edit: As Felix notes, you should prevent the index from going negative:

my_list[max(0, len(my_list) - 10):]

そして、もちろん、他の答えが指摘しているように、定数負の指標は実際にあなたの目標を達成する最も簡単な方法です。最初に、スライスに関するPythonの規則をフルに活用していなくても理にかなっていた最後の10個の要素を取得する「独自の方法」が、なぜあなたにエラーを出すのかに焦点を当てたかったのです。

5
追加された
@ FelixYan - あなたが正しいです、私はそれを修正します!
追加された 著者 Brandon Rhodes,
@ショップ - はい、あります。たとえば、リストの長さが9の場合、インデックスは-1になり、実際に必要とする9つの要素の代わりに、リストの最後から1つの要素のスライスしか得られません(if彼は10を得ることができません、彼は "可能な限り10に近い"を望んでいます)。
追加された 著者 Brandon Rhodes,
@ショップ - ああ、はい、私はあなたを理解する!あなたは大丈夫です:最後の n 要素を通常のPythonの方法でつかまえれば、減算やオーバーフローの問題は全くありません。そして、喜んで、いくつかの質問が彼の質問を無視しました - 「なぜこれは機能しないのですか?」 - そして、きちんと答えて、「私はこの仕事を最初からやってみるべきではない? ":)私はジャンプして、なぜ彼の構文がうまくいかなかったのか理解するのを助けたかったので、リスト名がスライス表記の前になければならないことを理解しました。
追加された 著者 Brandon Rhodes,
彼のリストの長さが<10のとき。
追加された 著者 Felix Yan,
負のスライス境界を防ぐ必要はありません。
追加された 著者 hop,
申し訳ありませんが、私は十分に明確ではありませんでした。あなたが最初に正しいことをしたら、それは問題にならないでしょう。リストの最後のn個の要素を取得する正しいスライスは、 チュートリアルです。
追加された 著者 hop,
うー、あなたは正しい。私はちょうどmy_listを忘れてしまった:(
追加された 著者 sura,