web-dev-qa-db-ja.com

リストの最後のアイテムを削除する方法は?

特定の質問に答えるのにかかる時間を計算し、答えが間違っているときにwhileループを終了するこのプログラムがありますが、最後の計算を削除したいので、min()を呼び出すことができ、間違った時間ではありませんこれがわかりにくい場合。

from time import time

q = input('What do you want to type? ')
a = ' '
record = []
while a != '':
    start = time()
    a = input('Type: ')
    end = time()
    v = end-start
    record.append(v)
    if a == q:
        print('Time taken to type name: {:.2f}'.format(v))
    else:
        break
for i in record:
    print('{:.2f} seconds.'.format(i))
79
Samir

質問を正しく理解できた場合は、スライス表記を使用して、最後のアイテム以外のすべてを保持できます。

record = record[:-1]

しかし、より良い方法はアイテムを直接削除することです:

del record[-1]

注1:record = record [:-1]を使用しても実際には最後の要素は削除されず、サブリストがrecordに割り当てられることに注意してください。関数内で実行し、レコードがパラメーターである場合、これにより違いが生じます。 record = record [:-1]を使用すると、元のリスト(関数の外側)は変更されず、del record [-1]またはrecord.pop()を使用するとリストが変更されます。 (コメントで@pltrdyが述べたように)

注2:コードでは、いくつかのPythonイディオムを使用できます。これを読むことを強くお勧めします。
Pythonistaのようなコード:Idiomatic Python (ウェイバックマシンアーカイブ経由)。

130
sebastian

これを使うべきです

del record[-1]

の問題

record = record[:-1]

アイテムを削除するたびにリストのコピーが作成されるため、あまり効率的ではありません

126
John La Rooy

list.pop()は、リストの最後の要素を削除して返します。

70
Maciej Gol

必要なもの:

record = record[:-1]

forループの前。

これにより、recordが現在のrecordリストに設定されますが、without最後の項目になります。必要に応じて、これを行う前にリストが空でないことを確認したい場合があります。

7
paxdiablo

タイミングをよくやるなら、この小さな(20行)コンテキストマネージャーをお勧めします。

コードは次のようになります。

#!/usr/bin/env python
# coding: utf-8

from timer import Timer

if __== '__main__':
    a, record = None, []
    while not a == '':
        with Timer() as t: # everything in the block will be timed
            a = input('Type: ')
        record.append(t.elapsed_s)
    # drop the last item (makes a copy of the list):
    record = record[:-1] 
    # or just delete it:
    # del record[-1]

参考のために、 タイマー コンテキストマネージャーの内容を以下に示します。

from timeit import default_timer

class Timer(object):
    """ A timer as a context manager. """

    def __init__(self):
        self.timer = default_timer
        # measures wall clock time, not CPU time!
        # On Unix systems, it corresponds to time.time
        # On Windows systems, it corresponds to time.clock

    def __enter__(self):
        self.start = self.timer() # measure start time
        return self

    def __exit__(self, exc_type, exc_value, exc_traceback):
        self.end = self.timer() # measure end time
        self.elapsed_s = self.end - self.start # elapsed time, in seconds
        self.elapsed_ms = self.elapsed_s * 1000  # elapsed time, in milliseconds
3
miku

リストのリストがある場合(tracked_output_sheet)、各リストから最後の要素を削除する場合、次のコードを使用できます。

interim = []
for x in tracked_output_sheet:interim.append(x[:-1])
tracked_output_sheet= interim
1
FlyingZebra1