[解決済み] Python リストエラーです。[1]スライスの[::-1]ステップ
2022-03-04 20:24:06
質問
Pythonでリストスライスの基本を理解したつもりでしたが、以下のようにスライスで負のステップを使用しているときに予期せぬエラーが発生しました。
>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:-1]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[:-1:-1]
[]
(これはPython 3.5で実行されていることに注意してください)
なぜa[:-1:-1]はa[::-1]でリスト全体を通過するのと同じようにa[:-1]スライスを逆ステップで通過しないのですか?
list.reverse()も同様に使用できることは理解していますが、根本的なパイソンのスライス機能をよりよく理解しようとしているのです。
どのように解決するのですか?
最初の
-1
で
a[:-1:-1]
は、あなたが考えているような意味ではないのです。
スライシングでは、負の開始/終了インデックスは文字通りに解釈されません。その代わり、それらはリストの終わりを便利に参照するために使われます(つまり、それらは
len(a)
). これはスライスの方向とは無関係に起こります。
これは、次のことを意味します。
a[:-1:-1]
は、以下と同等です。
a[:len(a)-1:-1]
逆方向スライスの際に省略された場合、開始インデックスはデフォルトで
len(a)-1
となり、上記は以下と同等となります。
a[len(a)-1:len(a)-1:-1]
開始インデックスと終了インデックスが同じで、終了インデックスは排他的であるため、これは常に空リストとなります。
0番目の要素まで、およびそれを含めて逆方向のスライスを行うには、次のいずれかの表記を使用します。
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[:None:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[:-len(a)-1:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
関連
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] スライス表記を理解する
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] スライス表記を理解する