54

与えられたリスト

a = range(10)

次のようなステートメントを使用してスライスできます

a[1]
a[2:4]

ただし、コードの他の場所で設定された変数に基づいてこれを実行したいと思います。私は最初のもののためにこれを簡単に行うことができます

i = 1
a[i]

しかし、他の人のためにこれをどのように行うのですか?リストを使用してインデックスを作成してみました。

i = [2, 3, 4]
a[i]

しかし、それはうまくいきません。文字列も試してみました:

i = "2:4"
a[i]

しかし、それも機能しません。

これは可能ですか?

4

5 に答える 5

111

それslice()が目的です:

a = range(10)
s = slice(2,4)
print a[s]

これは、を使用するのと同じa[2:4]です。

于 2012-05-13T16:56:48.937 に答える
11

なぜそれは単一の変数でなければならないのですか?2つの変数を使用するだけです。

i, j = 2, 4
a[i:j]

本当に単一の変数である必要がある場合は、タプルを使用できます。

于 2012-05-13T16:53:28.220 に答える
3

以下の割り当てでは、表示しているのと同じタイプのスライス操作を引き続き使用していますが、値の変数を使用しています。

a = range(10)
i = 2
j = 4

それから

print a[i:j]
[2, 3]
于 2012-05-13T16:56:36.933 に答える
2
>>> a=range(10)
>>> i=[2,3,4]

>>> a[i[0]:i[-1]]
range(2, 4)

>>> list(a[i[0]:i[-1]])
[2, 3]
于 2012-05-13T17:02:47.947 に答える
2

私は最近、コマンドラインで渡された引数を介して、、などa:b:cの通常のスライス構文をユーザーに模倣させる方法を調べているときに、これに遭遇しました。::c

':'引数は文字列として読み取られるので、分割したり、渡したりしたくありませんslice()。さらに、ユーザーが単一の整数を渡した場合i、意図された意味は明らかにa[i]です。それでも、slice(i)デフォルトでになりますがslice(None,i,None)、これは望ましい結果ではありません。

いずれにせよ、私が思いついた最も簡単な解決策は、文字列を変数stsayとして読み取り、目的のリストスライスをとして復元することeval(f"a[{st}]")でした。

これは、組み込みのeval()と中括弧内で補間されるf-stringを使用します。stコロンを含む文字列をそのままプラグインするだけなので、通常のコロンで区切られたスライス構文を正確に処理します。

于 2020-02-29T03:49:35.223 に答える