4
N=8
f,g=4,7
indexList = range(N)
print indexList
print f, g
indexList.pop(f)
indexList.pop(g)

In this code I am getting an error stating that the pop index of g in indexList is out of range. Here is the output:

[0, 1, 2, 3, 4, 5, 6, 7]
4 7
Traceback (most recent call last):
indexList.pop(g)
IndexError: pop index out of range

I don't understand, g has a value of 7, the list contains 7 values, why is it not able to return me the 7 in the list?

4

3 に答える 3

7

ポップされたリストの最終値を取得するには、次のようにします。

>>> l=range(8)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7]
>>> l.pop(4)                    # item at index 4
4
>>> l
[0, 1, 2, 3, 5, 6, 7]
>>> l.pop(-1)                   # item at end - equivalent to pop()
7
>>> l
[0, 1, 2, 3, 5, 6]
>>> l.pop(-2)                   # one left of the end 
5
>>> l
[0, 1, 2, 3, 6]
>>> l.pop()                     # always the end item
6
>>> l
[0, 1, 2, 3]

ポップするとアイテムが削除され、ポップ後にリストの長さが変わることに注意してください。サイズが変化する可能性のあるリストの末尾からインデックスを作成するには、負の数を使用するか、最後のアイテムに引数を指定せずに pop() を使用します。

pop はこれらのエラーを生成する可能性があるため、例外ブロックでよく見られます。

>>> l=[]
>>> try:
...    i=l.pop(5)
... except IndexError:
...    print "sorry -- can't pop that"
... 
sorry -- can't pop that
于 2012-08-29T16:18:21.810 に答える
6

4 をポップすると、リストには 7 つの値しかありません。print indexListの後にすると、次pop(f)のようになります。

[0, 1, 2, 3, 5, 6, 7]
于 2012-08-29T16:12:22.173 に答える
4

他のすべての回答と同様に、pop()関数に関する重要な部分は、配列から値を削除してインデックスを変更することです。インデックス 4 をポップすると、リストには 7 つの項目が残ります。Python のインデックスは 0 から始まるため、7 項目のリストにはインデックス 0 から 6 のみが含まれることを知っておくことが重要です。

通常、「ポッピング」関数は、処理待ちの値のリストから値を取得することを目標とするスタックまたはキューを実装するときに使用されます。誤って同じデータを 2 回処理しないように、取得と同時に削除するようにしてください。

スタックとキューは、値を削除せずに値だけを返す操作で実装できる場合がありますpeekが、Python は特別なラッパーなしで通常の配列だけを使用してスタックとキューを実装するため、peek 関数が標準array[index]呼び出しになります。

----編集----インデックス
7 の項目を削除する代わりに、7を削除したい場合があると思います。その場合は、 を呼び出す必要があります。これにより、インデックスに関係なく、リスト内の の最初のインスタンスが削除されます ( value がない場合はエラーがスローされます)。ただし、それにはインデックスが必要であることはご理解いただけたと思います。indexList.remove(7)77pop()

念のため、Python データ構造 APIを参照して、利用可能な関数、関数の機能、関数の引数についての詳細を確認してください。

于 2012-08-29T16:24:23.810 に答える