ホームページ バックエンド開発 Python チュートリアル Python のスライス操作を 1 つの記事で徹底的に理解する

Python のスライス操作を 1 つの記事で徹底的に理解する

Jul 31, 2019 pm 03:59 PM
python スライス操作

Python のスライス操作を 1 つの記事で徹底的に理解する

Python を使用してさまざまな実際的な問題を解決する過程で、オブジェクトから部分的な値を抽出する状況によく遭遇しますが、これを完了するために特にスライス操作が使用されます。操作性の強力な武器。理論的には、条件式が適切であれば、1 回または複数回のスライス操作で任意の目標値を取得できます。スライス操作の基本構文は比較的単純ですが、内部ロジックを十分に理解していないとエラーが発生しやすく、そのようなエラーは奥深くに隠されていて検出が難しい場合があります。この記事では、スライス操作のさまざまな状況を詳細な例を通してまとめています。間違いや不足がある場合は、修正してください。

1. Python のスライブル オブジェクトのインデックス付け方法

Python のスライブル オブジェクトのインデックス付け方法には、正のインデックスと負のインデックスが含まれます。

下の図に示すように、例として a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] を取り上げます。

Python のスライス操作を 1 つの記事で徹底的に理解する

2. Python スライス操作の一般的な方法

完全なスライス式には、3 つのパラメーター (start_index、end_index、step) を区切るために使用される 2 つの「:」が含まれています。 「:」は 1 つだけあり、デフォルトの 3 番目のパラメータ step=1 です。

スライス操作の基本式: object[start_index : end_index : step]

step: 正と負の両方の数値を使用できます。その絶対値は、データをカットするときの「ステップ サイズ」を決定します。正と負の符号は「切断方向」を決定します。正は「左から右」に値を取得することを意味し、負は「右から左に」値を取得することを意味します。 step を省略した場合、デフォルトは 1 です。つまり、値は左から右に 1 ずつ増分されます。 「切る方向はとても重要です!」 「切る方向はとても重要です!」 「切る方向はとても重要です!」 大事なことは3回言いましょう!

start_index: 開始インデックス(インデックス自体も含む)を示します。このパラメータを省略した場合は、オブジェクトの「終点」から開始することを意味します。 「終点」、ステップで決定 ステップは正負のパラメータで決定され、ステップが正の場合は「始点」から、負の場合は「終点」から開始されます。

end_index: 終了インデックス(インデックス自体を除く)を示します。このパラメータを省略した場合は、「終点」までデータを取得することを意味します。 「終点」、これもステップパラメータによって決まります。正負で決まり、ステップが正の場合は「終点」へ、負の場合は「始点」へ進みます。 。

3. Python スライス操作の詳細な例

次の例は、リスト a = [0, 1, 2, 3, 4, 5, 6] に基づいています。 , 7, 8 , 9] 例:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ログイン後にコピー

1. 単一の値を切り取る

>>> a[0]
0
>>> a[-4]
6
ログイン後にコピー

2. 完全なオブジェクトを切り取る

>>> a[:] # 从左往右
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::] # 从左往右
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::-1] # 从右往左
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
ログイン後にコピー

3. start_index とend_index は両方とも正 ( ) インデックスです

>>> a[1:6] # step=1,从左往右取值,start_index=1到end_index=6同样表示从左往右取值。
[1, 2, 3, 4, 5]
>>>a[1:6:-1] # step=-1,决定了从右往左取值,而start_index=1到end_index=6决定了从左往右取值,两者矛盾。
>>> [] # 输出为空列表,说明没取到数据。
>>>a[6:1] # step=1,决定了从左往右取值,而start_index=6到end_index=1决定了从右往左取值,两者矛盾。
>>> [] # 同样输出为空列表。
>>>a[:6] # step=1,从左往右取值,从“起点”开始一直取到end_index=6。
>>> [0, 1, 2, 3, 4, 5]
>>>a[:6:-1] # step=-1,从右往左取值,从“终点”开始一直取到end_index=6。
>>> [9, 8, 7]
>>>a[6:] # step=1,从左往右取值,从start_index=6开始,一直取到“终点”。
>>> [6, 7, 8, 9]
>>>a[6::-1] # step=-1,从右往左取值,从start_index=6开始,一直取到“起点”。
>>> [6, 5, 4, 3, 2, 1, 0]
ログイン後にコピー

関連する推奨事項: 「Python ビデオ チュートリアル

4. start_index と end_index が両方とも負 (-) インデックスである場合

>>>a[-1:-6] # step=1,从左往右取值,而start_index=-1到end_index=-6决定了从右往左取值,两者矛盾。
>>> []
>>>a[-1:-6:-1] # step=-1,从右往左取值,start_index=-1到end_index=-6同样是从右往左取值。
>>> [9, 8, 7, 6, 5]
>>>a[-6:-1] # step=1,从左往右取值,而start_index=-6到end_index=-1同样是从左往右取值。
>>> [4, 5, 6, 7, 8]
>>>a[:-6] # step=1,从左往右取值,从“起点”开始一直取到end_index=-6。
>>> [0, 1, 2, 3]
>>>a[:-6:-1] # step=-1,从右往左取值,从“终点”开始一直取到end_index=-6。
>>> [9, 8, 7, 6, 5]
>>>a[-6:] # step=1,从左往右取值,从start_index=-6开始,一直取到“终点”。
>>> [4, 5, 6, 7, 8, 9]
>>>a[-6::-1] # step=-1,从右往左取值,从start_index=-6开始,一直取到“起点”。
>>> [4, 3, 2, 1, 0]
ログイン後にコピー

5. start_index と end_index が正 ( ) 負 (-) の混合インデックスの場合

>>>a[1:-6] # start_index=1在end_index=-6的左边,因此从左往右取值,而step=1同样决定了从左往右取值。
>>> [1, 2, 3]
>>>a[1:-6:-1] # start_index=1在end_index=-6的左边,因此从左往右取值,但step=-则决定了从右往左取值,两者矛盾。
>>> []
>>>a[-1:6] # start_index=-1在end_index=6的右边,因此从右往左取值,但step=1则决定了从左往右取值,两者矛盾。
>>> []
>>>a[-1:6:-1] # start_index=-1在end_index=6的右边,因此从右往左取值,而step=-1同样决定了从右往左取值。
>>> [9, 8, 7]
ログイン後にコピー

6. 連続スライス操作

>>>a[:8][2:5][-1:]
>>> [4]
ログイン後にコピー

は次と同等です:

a[:8]=[0, 1, 2, 3, 4, 5, 6, 7]
a[:8][2:5]= [2, 3, 4]
a[:8][2:5][-1:] = 4
ログイン後にコピー

理論的には、最後に返されたオブジェクトが空でないスライス可能オブジェクトである限り、無制限の連続スライス操作が可能です。

7. スライス操作の 3 つのパラメーターは、式

>>>a[2+1:3*2:7%3] # 即:a[2+1:3*2:7%3] = a[3:6:1]
>>> [3, 4, 5]
ログイン後にコピー
を使用して表現できます。

8. 他のオブジェクトのスライス操作

前のスライス操作命令では、リストをリストとして受け取ります。たとえば、タプルや文字列など、スライスできるデータ型は数多くあります。

>>> (0, 1, 2, 3, 4, 5)[:3] # 元组的切片操作
>>> (0, 1, 2)
>>>'ABCDEFG'[::2] # 字符串的切片操作
>>>'ACEG'
>>>for i in range(1,100)[2::3][-10:]: # 利用range函数生成1-99的整数,然后取3的倍数,再取最后十个。
       print(i, end=' ')
>>> 72 75 78 81 84 87 90 93 96 99
ログイン後にコピー

4. Python で一般的に使用されるスライス操作

リストを取得します: a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] は説明オブジェクトです。

>>>b = a[::2]
[0, 2, 4, 6, 8]
ログイン後にコピー
は偶数の位置にあります。

>>>b = a[1::2]
[1, 3, 5, 7, 9]
ログイン後にコピー

2. 奇数の位置にあります。

>>>b = a[:] # ★★★★★
>>>print(b) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>print(id(a)) # 41946376
>>>print(id(b)) # 41921864
>>>b = a.copy()
>>>print(b) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>print(id(a)) # 39783752
>>>print(id(b)) # 39759176
需要注意的是:[:]和.copy()都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用,而不是独立分配内存。
>>>a = [1,2,['A','B']]
>>>print('a={}'.format(a))
a=[1, 2, ['A', 'B']] # 原始a
>>>b = a[:]
>>>b[0] = 9 # 修改b的最外层元素,将1变成9
>>>b[2][0] = 'D' # 修改b的内嵌层元素
>>>print('a={}'.format(a)) # b修改内部元素A为D后,a中的A也变成了D,说明共享内部嵌套元素,但外部元素1没变。
a=[1, 2, ['D', 'B']] 
>>>print('b={}'.format(b)) # 修改后的b
b=[9, 2, ['D', 'B']] 
>>>print('id(a)={}'.format(id(a)))
id(a)=38669128
>>>print('id(b)={}'.format(id(b)))
id(b)=38669192
ログイン後にコピー

3. オブジェクト全体をコピーします。

>>>a[3] = ['A','B']
[0, 1, 2, ['A', 'B'], 4, 5, 6, 7, 8, 9]
ログイン後にコピー

4.単一の要素を変更します

>>>a[3:3] = ['A','B','C']
[0, 1, 2, 'A', 'B', 'C', 3, 4, 5, 6, 7, 8, 9]
>>>a[0:0] = ['A','B']
['A', 'B', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ログイン後にコピー

5.要素を挿入

>>>a[3:6] = ['A','B']
[0, 1, 2, 'A', 'B', 6, 7, 8, 9]
ログイン後にコピー
6.要素の一部を置換

rrreee

5.概要

(1) start_index、end_index、および step は、正と負の両方、または正と負の混合を使用できます。ただし、1 つの原則に従う必要があります。つまり、2 つの値の順序が同じでなければなりません。そうしないと、データを正しく取得できません。start_index の位置が end_index の左側にある場合、それは次のことを意味します。値は左から右に取得され、step は正の数でなければなりません (左から右という意味もあります)。start_index の位置が end_index の右側にある場合、値は右から左に取得されることを意味します。このとき、step は負の数でなければなりません (右から左という意味もあります)。特殊なケースとして、start_index または end_index を省略した場合、開始インデックスと終了インデックスは step の正または負の値によって決定され、値の方向に矛盾はありませんが、正と負で得られる結果は完全に異なります。 1 つは左に、もう 1 つは右にあるため、異なります。

(2) スライスを使用する場合、特にステップを省略した場合、ステップの正と負を考慮する必要があります。たとえば、a[-1:] は、「終了点」から「開始点」に向かって始まると誤解されやすいです。つまり、a[-1:]= [0, 1, 2, 3, 4, 5] , 6, 7 , 8, 9] ですが、実際には a[-1:]=a[-1]=9 です。その理由は、step=1 が値を左から右に取得することを意味し、開始インデックス start_index= であるためです。 -1自体がオブジェクトの最大値であり、右側には要素がなく、さらに右側にはデータがないため、要素はa[-1]の1つだけです。

以上がPython のスライス操作を 1 つの記事で徹底的に理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

ターミナルVSCODEでプログラムを実行する方法 ターミナルVSCODEでプログラムを実行する方法 Apr 15, 2025 pm 06:42 PM

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

VSCODE拡張機能は悪意がありますか? VSCODE拡張機能は悪意がありますか? Apr 15, 2025 pm 07:57 PM

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

Windows 8でコードを実行できます Windows 8でコードを実行できます Apr 15, 2025 pm 07:24 PM

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

Python:自動化、スクリプト、およびタスク管理 Python:自動化、スクリプト、およびタスク管理 Apr 16, 2025 am 12:14 AM

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

See all articles