11

おそらく深刻なソースからセージスクリプトをダウンロードしました。それは私のコンピューターでは動作せず、簡単なデバッグにより、ある時点で、作成者が n 要素リストに 1 から n までの番号が付けられているかのように行っていたことが問題の原因であることがわかりました (一方、「通常の」番号付けはPython では (したがって) sage は 0..n-1 です)。

私は何が欠けていますか?APL のように、この規則を変更するグローバル変数がどこかに隠されていますか?

助けてくれてありがとう (英語と CSish の両方の理解力が弱いにもかかわらず、私の質問が明確であることを願っています...)

4

5 に答える 5

8

Python (したがってセージ) のリストは常に 0 から数えられ、それを変更する方法はありません。

CPython のソースを見ると、http ://hg.python.org/cpython/file/70274d53c1dd/Objects/listobject.c の449 行目:

static PyObject *
list_item(PyListObject *a, Py_ssize_t i)
{
    if (i < 0 || i >= Py_SIZE(a)) {
        if (indexerr == NULL) {
            indexerr = PyString_FromString(
                "list index out of range");
            if (indexerr == NULL)
                return NULL;
        }
        PyErr_SetObject(PyExc_IndexError, indexerr);
        return NULL;
    }
    Py_INCREF(a->ob_item[i]);
    return a->ob_item[i];
}

アイテム ルックアップは基になる C 配列に直接委任され、C 配列は常に 0 から始まります。そのため、Python のリストも常に 0 から始まります。

于 2012-04-30T04:30:06.443 に答える