徹底的にPythonのスライシング操作を知ってもらいます

 
  、実用的な問題を解決するためのPythonを使用するプロセスでは、多くの場合、我々は状況が発生したオブジェクトからいくつかの値を抽出し、スライシング操作は、この操作を完了するために強力な武器に専用されています。理論的には、限り適切な条件式など、任意の単一または複数のターゲットスライスカットすることによって達成することができます。内部ロジックでもあり、エラーに非常になりやすい、そして隠されたよりも、時には深く、このエラーは、困難を検出する場合の基本的な構文のスライス作業は比較的シンプルですが、完全には明らかではありません。この記事では、様々な操作へのペレットの具体例をまとめたものです。エラーや不備場合は私にダニエルを修正してください!


まず、インデックスは、オブジェクトのPythonをスライスすることができます

Pythonはスライスする索引オブジェクトは、前記正の屈折率負の指数二つの部分の。
以下に示すようにa = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]例:


スライスのPythonの動作の第二に、一般的なモード

完全な発現は、2つのスライスを含む「:」、三つのパラメータ(START_INDEX、END_INDEX、ステップ)を分離する場合にのみ「:」第三のステップ= 1の、デフォルトパラメータ。

切片操作基本表达式:object[start_index : end_index : step]

STEP:正と負の数が利用可能で、絶対値がカットデータの「ステップ」を決定し、符号は「切断方向」を決定し、N「権利のため、値「左から右」陰性を示し「値を残しました。ステップが省略された場合、デフォルトは、増分値を左から右へ、即ち、1です。カット方向は非常に重要です!」「カット方向は非常に重要です!」「カット方向は非常に重要です!」、3回重要なことを言いました!

START_INDEX:(インデックス自体を含む)開始インデックスを示し、「出発点」または「宛先」が開始されると、オブジェクト「エンドポイント」開始値から、この引数を省略し、ステップによって決定正および負のパラメータ、負の「終わり」からスタート始まった「出発点」から前向きな一歩です。

END_INDEX:終了インデックス(インデックス自体は含まれていない)を示し、引数が省略された場合、「開始点」または「エンドポイント」、ステップによって決定同一の正および負のパラメータであるように、データアップを取って、「終了」を示し、進みます「終了」までのタイミングがするまで否定である「出発点。」


三、スライス作業の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]
( - )インデックスケース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]
連続切片の前記動作
>>>a[:8][2:5][-1:]
>>> [4]

:に相当する
[: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

四、Pythonの一般的なスライス作業

リストには:a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]オブジェクトを説明するために、

1.でもポジションを取ります
>>>b = a[::2]
[0, 2, 4, 6, 8]
2.奇妙なポジションを取ります
>>>b = a[1::2]
[1, 3, 5, 7, 9]
3.オブジェクト全体をコピーします
>>>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
4.個々の要素を変更します。
>>>a[3] = ['A','B']
[0, 1, 2, ['A', 'B'], 4, 5, 6, 7, 8, 9]
5.特定の位置に要素を挿入
>>>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]
6要素の一部あるいは
>>>a[3:6] = ['A','B']
[0, 1, 2, 'A', 'B', 6, 7, 8, 9]

V.の概要

(A)START_INDEX、END_INDEX、ステップ記号を組み合わせて用いてもよいし、同じで陰性であり、陽性の両方であってもよいです。しかし、我々は、オーダーの値の両方が同じでなければならないという原則に従わなければなりませんそれ以外の場合は、データを適切にカットすることは不可能である、:中START_INDEX位置左から右の値に示し、END_INDEXを去ったときにすると、その後のステップは、(正でなければなりません同様に)左から右に表されるとするとき、右位置END_INDEXのSTART_INDEX、右から左への値を示し、この時間ステップ)が同様に表さを左に右(負でなければなりません。特別な場合については、START_INDEXのEND_INDEXまたは省略、開始インデックスと終了インデックス正および負のステップ、ケースの値の方向は、競合がある存在しないことによって決定されるが、正および負の結果を取るためには、のように、完全に異なっています左から右へ。
スライスを使用した場合(B)、正および負のステップは、ステップが省略された場合は特に、考慮しなければなりません。例えばa[-1:]、誤って「終了」始まりは、それが「開始点」を取ることであったことを信じることは容易でありa[-1:]= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]、実際には、a[-1:]=a[-1]=9= 1ステップは、=左から右へ値を表し、そして開始インデックスSTART_INDEXため-1オブジェクト自体であり、その後、右側の要素、およびのほとんどは右のデータ、これだけ持っていなかったa[-1]一つの要素を。

 
 
 
少し元変更した後
モルディブモルディブ:原作者
の説明リンク:https://www.jianshu.com/p/15715d6f4dadを

おすすめ

転載: www.cnblogs.com/malinqing/p/11272485.html