2013-03-30 33 views
20

リストの最後のN個の要素を削除する方法がありますか?リストの最後のN個の要素を削除する

for i in range(0,n): 
    lst.pop() 
+4

リスト 'list'を呼び出さないでください。または組み込みの 'list'クラス – jamylak

+0

Danielを使用できない場合は、この質問に適切な回答(Luca Citi)を選択してください。 – Sheljohn

答えて

-1

ための作品あなたが最後のn個の要素を削除したい場合は、他の言葉で、最初のlenを保つ - n個の要素:

lst = lst[:len(lst)-n] 

注:これではありませんメモリ動作中である。コピーを作成します。

+0

これは実際に多くの影響を与えることはありませんが、これは実際にn番目の要素までリストのコピーを作成することに注意してください – jamylak

+0

ああ:) :)ノートを作った – karthikr

+32

これはどのように受け入れられた答えになることができますか?それは正しい結果を与えることさえできません。 – Vincenzooo

56

n >= 1

>>> L = [1,2,3, 4, 5] 
>>> n=2 
>>> del L[-n:] 
>>> L 
[1, 2, 3] 
+1

これは、他の回答と同じ問題が言及されています.n <= 0.(リストを削除すると0、リストの先頭から<0を削除します。リストをコピーする余裕があればLuca Citiのスライス解答が良いと思います。そうでなければn> 0のチェックが必要です。 –

+0

@DanielB。 n <= 0では動作しませんが、単純な解決策であり、多くのユースケースのニーズを解決できます。また、Pythonを初めて使う人にも役立ちます。誰もが任意のソリューションを使用するように自由に感じることができるので、私たちはさまざまなものを持っています – jamylak

7

このようにdelを試してみてください。

del list[-n:] 
+1

はn> 0で動作します! – sebhaase

8

私は、これはずっと前に頼まれたが、見る私のためにそれをやった回答なし;最後のN個の要素がないリストを取得したいが、オリジナルの要素を保持したい場合はどうすればよいでしょうか:ただlist[:-n]を実行します。 n0に等しいケースを処理する必要がある場合は、list[:-n or None]を実行します。

>>> a = [1,2,3,4,5,6,7] 
>>> b = a[:-4] 
>>> b 
[1, 2, 3] 
>>> a 
[1, 1, 2, 3, 4, 5, 7] 

簡単なことですが、

1

これはpythonicが私には役に立たず、隠れたバグや混乱を招く場合の1つです。 n = 0の場合は、上記の解決法はどれも動作しません。一般的なケースでl[:len(l)-n]作品を使用して :

l=range(4) 
for n in [2,1,0]: #test values for numbers of points to cut 
    print n,l[:len(l)-n] 

これは、あなたが何かをカットしていない可能性を残しておきたいベクトルのエッジをトリミングする機能の例に便利です。

16

Vincenzoooが正しく言うように、lst[:-n]n==0のときには機能しません。

すべてn>=0に対して次の作品:どれも省略する必要がない場合は(最後のn個の要素またはnoneを省略スライスを返す」:それはあまりにも種類の読みやすい英語であるため、

lst = lst[:-n or None] 

私は、このソリューションが好き)」。

このソリューションは、理由の作品次

  • x or yxが(例えば、それがないとき0""FalseNone、...)、論理的に真であるときxに評価し、それ以外にy 。したがって、-n or Noneは、n!=0との場合はNoneの場合、-nです。
  • スライスする場合、Noneは値を省略することと同等です。したがって、lst[:None]lst[:]と同じです(hereを参照)。
+2

このソリューションは、はるかにPythonicとPEP8フレンドリーです。それは0の場合を説明しているので特に優れています。しかし、質問されたように質問に答えるためには、 "lst = lst [: - n or None]"のような代入に答えを変えたいかもしれません。 –

関連する問題