目次
1.ステップ処理
2.開始処理
3.処理を停止します
Python でのスライス操作の拡張について:
ホームページ バックエンド開発 Python チュートリアル Pythonで長すぎるスライスパラメータに対処する方法と例を紹介します。

Pythonで長すぎるスライスパラメータに対処する方法と例を紹介します。

Dec 15, 2020 pm 05:05 PM
python slice

Python チュートリアルこのコラムでは、長すぎるスライス パラメーターに対処する方法を紹介します

Pythonで長すぎるスライスパラメータに対処する方法と例を紹介します。

スライス パラメーターの概念については、多くの友人がまだ理解しています。概念的、スライス パラメータは 3 つあり、ステップ、開始、停止です。パラメータの値も変数であるため、次のステップでそれらを処理する必要があります。前回のスライスの説明で、リストデータが長すぎる問題について触れましたが、この問題はパラメータにも存在します。次に、スライスにおけるパラメータの問題をより深く理解するために、ステップ、スタート、ストップの 3 つのパラメータのそれぞれの処理について説明します。

関連する無料学習の推奨事項: python チュートリアル (ビデオ)

1.ステップ処理

if (r->step == Py_None) {
     /* step 默认是 1,这不难理解 */
   *step = 1;
 } else {
   if (!_PyEval_SliceIndex(r->step, step)) return -1;
     /* step 不能为零,否则报 ValueError,要注意的是,这个异常是在执行 BINARY_SUBSCR 才报出来,
    * 在创建 slice 对象时如果 step 为 0 并不会报错 */
   if (*step == 0) {
     PyErr_SetString(PyExc_ValueError, "slice step cannot be zero");
     return -1;
   }
   /* step 的最小值,他是根据 size_t 来定义的
    * #define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
    * 所以在 32 为系统上就是 -2147483647 */
   if (*step < -PY_SSIZE_T_MAX)
     *step = -PY_SSIZE_T_MAX;
 }
ログイン後にコピー

2.開始処理

/* 当 start 未设置时的默认值,length 是序列的长度
  * 如果切片从序列头部开始(step > 0),start = 0
  * 如果切片从序列末尾开始(step < 0),start = length - 1 */
 defstart = *step < 0 ? length-1 : 0;
 if (r->start == Py_None) {
   *start = defstart;
 }
 else {
   if (!_PyEval_SliceIndex(r->start, start)) return -1;
   /* 如果 start 是负数,其实是通过加上序列长度转化成正数的 a[-1:] <=> a[4:] */
   if (*start < 0) *start += length;
   /* 如果加上 length 还是小于 0,也就是 -start 超出了序列长度,这时候会根据 step 的正负将start
    * 设置为序列的开始(0)或结束(-1)位置
    * a[-6:-1]  <=> a[0:-1]
    * a[-6:-1:-1] <=> a[-1:-1:-1] */
   if (*start < 0) *start = (*step < 0) ? -1 : 0;
    /* start 超出了序列长度,这时候会根据 step 的正负将start
    * 设置为序列的长度或序列长度减 1(最后一个元素)
    * a[6:-1]  <=> a[5:-1]
    * a[6:-1:-1] <=> a[4:-1:-1] */
   if (*start >= length)
     *start = (*step < 0) ? length - 1 : length;
 }
ログイン後にコピー

3.処理を停止します

/* 当 stop 未设置时的默认值,length 是序列的长度
  * 如果切片从序列头部开始(step > 0),stop = length,比最后一个元素的下标多 1
  * 如果切片从序列末尾开始(step < 0),start = -1,比第一个元素的下标少 1 */
 defstop = *step < 0 ? -1 : length;
 if (r->stop == Py_None) {
   *stop = defstop;
 } else {
   if (!_PyEval_SliceIndex(r->stop, stop)) return -1;
   /* 如果 stop 是负数,其实是通过加上序列长度转化成正数的 a[:-1] <=> a[:4] */
   if (*stop < 0) *stop += length;
   /* 如果加上 length 还是小于 0,也就是 -stop 超出了序列长度,这时候会根据 step 的正负将 stop
    * 设置为序列的开始(0)或结束(-1)位置
    * a[3:-6]  <=> a[3:0]
    * a[3:-6:-1] <=> a[3::-1] */
   if (*stop < 0) *stop = (*step < 0) ? -1 : 0;
   if (*stop >= length)
     *stop = (*step < 0) ? length - 1 : length;
 }
ログイン後にコピー

注:

  • 指定された間隔は左開き、右閉じです
  • 最初から開始します。 start インデックス番号は省略可能ですが、コロンは省略できません
  • 最後で終了します 終了インデックス番号は省略できますが、コロンは省略できません
  • ステップ サイズのデフォルトは 1 です。連続的にスライスする場合は、数字とコロンの両方を省略できます。

Python でのスライス操作の拡張について:

Python でのスライス操作の完全な構文:

# i默认是0
# j默认是len(S)
# k的步长,默认为+1
S[i:j:k]
ログイン後にコピー

ここで、i、j、k はすべて負の値にすることができます。数値:

i < 0 または k < 0 の場合、len(S) i または len(S) j と同等;

k < 0 の場合、それは意味します[i,k ) ステップ サイズ k に従った文字間。左から右ではなく右から左に数えます。

&gt;&gt;&gt;S = &#39;abcdefg&#39;
&gt;&gt;&gt;S[-3:-1]
&#39;ef&#39;

&gt;&gt;&gt;S[-1:-3:-1]  # 将位于S[-1:-3]的字符子串,按照步长1,从右往左数,而不是从左往右数
&#39;gf&#39;

&gt;&gt;&gt;S[4:2:-1]
&#39;ed&#39;

&gt;&gt;&gt;S[2:4:-1]  # 输出空字符串
&#39;&#39;

&gt;&gt;&gt;S[::-1]  # 逆序
&#39;gfedcba&#39;
ログイン後にコピー

s[i:j:k] の形式は次のとおりであることに注意してください。は、次の形式と同等です:

&gt;&gt;&gt;S = &#39;abcdefg&#39;
&gt;&gt;&gt;S[slice(None, None, -1)]  # 等价于使用slice对象进行数组元素的访问操作
&#39;gfedcba&#39;
ログイン後にコピー

これで、Python における長すぎるスライス パラメータの処理方法と例についての記事は終了です。

以上がPythonで長すぎるスライスパラメータに対処する方法と例を紹介します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Deepseek Xiaomiをダウンロードする方法 Deepseek Xiaomiをダウンロードする方法 Feb 19, 2025 pm 05:27 PM

Deepseek Xiaomiをダウンロードする方法

テンプレートのメリットとデメリットは何ですか? テンプレートのメリットとデメリットは何ですか? May 08, 2024 pm 03:51 PM

テンプレートのメリットとデメリットは何ですか?

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Jul 01, 2024 am 07:22 AM

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表

わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます May 06, 2024 pm 03:52 PM

わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する

golang 関数のデバッグと分析の完全ガイド golang 関数のデバッグと分析の完全ガイド May 06, 2024 pm 02:00 PM

golang 関数のデバッグと分析の完全ガイド

どうやって彼にdeepseekに尋ねますか どうやって彼にdeepseekに尋ねますか Feb 19, 2025 pm 04:42 PM

どうやって彼にdeepseekに尋ねますか

NET40とはどのようなソフトウェアですか? NET40とはどのようなソフトウェアですか? May 10, 2024 am 01:12 AM

NET40とはどのようなソフトウェアですか?

See all articles