- リスト
[1,2,3,4,5,6,7,8,9,10]
を[:-3:-1]
でスライスした結果が[10,9]
になる - 本当は
[10,9,8]
を得たかった - 色々試してみると,
[:-4:-1]
と[-1:-4:-1]
が返す値が同じであることは分かった - しかし,以下の図と照らし合わせると,
[-1:-4:-1]
という表記では,初期値と終了値のペアが左にずれているように思える
(negative sliceの「-1」→「-4」で,-1ずつ取ると,[9,8,7]
が得られそうに思える)
ステップの起点はどうやって決まるのか?
- チートシートを頼りにするなら,
[-0:-3:-1]
で[10,9,8]
が得られれば自然な感じがしますが,これは空リストを返します([0:-3:-1]
と同じになる) - この変な感じがする動作は実際のところ,どのような仕様になっているのでしょうか?
(ドキュメントの見方が悪いのか,それっぽい記述が見つけられませんでした)
- また,「インデックスの値でスライスし,終了値は切り捨てる」と考えれば他の動作とも整合性をもって理解できるにも関わらず,上に掲載したようなチートシートが製作されたのはなぜでしょうか?(何か意図があったのか,あるいは想定していなかったのか,本家が別にあり,それを踏襲しただけなのか...など)
尚,スライスでreverse()
する方法にこだわって調べている理由は,
以下のページでスライスの実行速度が速いと紹介されていたためです
異論・補論がある場合は教えてもらえるとうれしいです
- [python] スライスでリバース!!
- 上ページで紹介されたSOの投稿:Best way to create a “reversed” list in Python?
回答してくださったhayataka2049さん,quiquiさん,ありがとうございます.
なるほど,0 <= n < (j-i)/k
というルールがあったのですね.まさか組み込み型のところに書いてあったとは,盲点でした!
今回は,より平易に書き下してくださったquiquiさんをベストアンサーとしたいと思います.
回答ありがとうございました!
(チートシートの謎はとりあえず保留にしておきます^^)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。