「手をつないでPythonを学ぶ」20リスト

前回の記事手をつないでPythonを学ぶ」19-第1段階の概要では、前の段階の内容を要約し、より複雑なプログラムを作成して適用しました。同時に、みんなに質問を残しました。つまり、ゲームの「デザイナー」として、どうすればすぐに推測できるのでしょうか。

実際、プログラムの実行中にコンピューターによって生成された4桁の数字を見てみましょう。その方法は、コンピューターが番号を生成した後に番号を「印刷」することです。プログラムデザイナーとして、誇りに思いますか?したがって、一部の大規模なゲームでは、プログラマーが自分のために裏口を残したり、戦闘力を高めたり、無敵でさえしたい場合、それは難しい作業ではないと想像できます。

今日から始まる学習の第一段階の終わりに、私たちは新しい旅を始めます。この段階では、Pythonのさまざまなデータ型とカスタム関数の使用法を学習します。この記事では、これまで何度も目にした「リスト」を正式に紹介します。

1.リストの定義

リストは、Pythonで最も一般的に使用されるデータ構造であり、角かっこで囲まれたデータシーケンスです。前に触れたように、シーケンス内の要素は、数値、ブール値、文字列、リスト、変数、およびその他のデータ型にすることも、上記の要素を含み、複数レベルのネストを形成するリストにすることもできます。同時に、リストの印刷結果も角括弧で囲まれたリストになります。

In [1]: list1 = [1, 'a']    # 列表元素是数字和字符串
        list
Out[1]: [1, 'a']
​
In [2]: list2 = [1, 'a', list1]   # 列表元素是数字、字符串和变量,同时变量又是一个列表,形成嵌套
        list2
Out[2]: [1, 'a', [1, 'a']]

ここで注意すべきことの1つは、リスト要素として使用できるデータ型は、数値、ブール値、文字列、リスト、変数だけでなく、タプル、辞書、セット、および後で学習するその他のデータ型であるということです。まだ紹介されていません。したがって、リストを定義して例示するときは、例として学んだことだけを取り上げてください(以下と同じ)。興味がある場合は、他のデータ型を学習するのを待って、これらのデータ型をリストの要素として使用できるかどうかのテストに戻ることができます。

2.リストのインデックスとスライス

リストの一般的な操作は、「追加、削除、変更、およびチェック」と呼ばれます。インデックス作成とスライスは「チェック」であり、リストの最も重要な操作方法の1つです。リストのインデックス作成とスライスの方法は、文字列が各文字を操作オブジェクトとして使用し、リストが各データ要素を操作オブジェクトとして使用することを除いて、文字列の方法とまったく同じです。

In [3]: string = 'Python'
        list = ['P', 'y', 't', 'h', 'o', 'n']
​
In [4]: string[3]
Out[4]: 'h'
​
In [5]: list[3]   # 索引的结果是对应的元素
Out[5]: 'h'
​
In [6]: string[2:5]
Out[6]: 'tho'
​
In [7]: list[2:5]   # 切片的结果是对应元素组成的列表
Out[7]: ['t', 'h', 'o']
​
In [8]: list[3:4]   # 切片的结果即使只有一个元素,结果也是列表
Out[8]: ['h']
​
In [9]: list[3:3]   # 甚至切片的结果为空,结果也是一个空列表
Out[9]: []

そのため、インデックスとスライスリストの方法のために、私は例を一つずつ与えることはありません。あなたが参照できる文字列の7 -インデックス「あなたと学習のPython」文字列の8スライス「あなたと学習のPython」の内容は、 2つの記事では、インデックス作成とスライスの方法をリストしています。特にスライスパラメータが複雑な場合は、1つずつ試して完全にマスターできるようにし、後でリストの重要なデータ構造を柔軟に使用するための基礎を築いてほしいと思います。

3.リストの変更

リストの「追加、削除、変更」は、まとめてリストの更新と呼ぶことができます。これは、リストの独自の機能でもあります。たとえば、次の記事で紹介する「タプル」は更新できません。

リスト変更には2つのケースがあります。

1つは、リストインデックスの後の「要素」を変更することです。この要素を変更された要素に直接置き換えることです。この要素は、数値、ブール値、文字列、リスト、またはこれらのデータ型の値を持つ変数など、さまざまなデータ型にすることができます。

In [10]: list3 = [0, 1, 2, 3, 4, 5]
         list3[0] = 'Python'   # 索引后的元素替换成字符串
         list3[1] = 10   # 索引后的元素替换成数字
         list3[2] = ['a', 'b']   # 索引后的元素替换成列表,形成嵌套
         list3[3] = list   # 索引后的元素替换成变量
         list3
Out[10]: ['Python', 10, ['a', 'b'], ['P', 'y', 't', 'h', 'o', 'n'], 4, 5]

2つ目は、リストがスライスされた後に「リスト」を変更することです。この時点で、変更されたオブジェクトは、文字列、リスト、またはこれらのデータ型を値とする変数など、「トラバース」できるデータ型である必要があります。置換プロセスは、スライスパーツのリスト要素を選択すると同時に、変更されたオブジェクトをリストの要素として最小単位(文字列の各文字、リストの各要素)に分割することと同じです。選択したダウンエレメントの位置に置き換えます。この場合の変更では、変更の前後で同じ数の要素は必要ありません。ただし、数値またはブール値は「トラバース」できないため、この場合、それらを置換値として使用することはできません。

In [11]: list4 = [0, 1, 2, 3, 4, 5]
         list4[2:3] = ['a', 'b']   # 对比上例中对于第三个元素的修改,此时不是将切片后的元素替换成列表,而是将切片后的元素替换成新的列表中的元素
         list4
Out[11]: [0, 1, 'a', 'b', 3, 4, 5]
​
In [12]: list5 = [0, 1, 2, 3, 4, 5]
         list5[:-1] = ['a', 'b']   # 替换前后的元素个数可以不同
         list5
Out[12]: ['a', 'b', 5]
​
In [13]: list6 = [0, 1, 2, 3, 4, 5]
         list6[2:4] = []   # 替换为空列表,相当于删除列表中指定位置的元素
         list6
Out[13]: [0, 1, 4, 5]
​
In [14]: list7 = [0, 1, 2, 3, 4, 5]
         list7[-1:] = 1   # 因为数据不能够被“遍历”,替换为数字时报错
         list7
Out[14]: ---------------------------------------------------------------------------
         TypeError                                 Traceback (most recent call last)
         <ipython-input-53-3b2d30b5da1c> in <module>
               1 list7 = [0, 1, 2, 3, 4, 5]
         ----> 2 list7[-1:] = 1   # 替换为非列表的数据元素报错
               3 list7
               
         TypeError: can only assign an iterable
         
In [15]: list8 = [0, 1, 2, 3, 4, 5]
         list8[-3:] = 'Python'   # 可以替换为字符串,但会先将字符串'Python'拆分到最小单元,再进行替换
         list8
Out[15]: [0, 1, 2, 'P', 'y', 't', 'h', 'o', 'n']
​
In [16]: list9 = [0, 1, 2, 3, 4, 5]
         list9[3:5] = ['P', 'y', 't', 'h', 'o', 'n']   # 可以替换为列表,也是将列表拆分成多个元素,再进行替换
         list9
Out[16]: [0, 1, 2, 'P', 'y', 't', 'h', 'o', 'n', 5]

スライス後に変更されるデータ型は「トラバース」できるため、forループステートメントをすぐに考えることができます。つまり、スライス後に置き換えられるデータ型は、forループが通過できるデータ型と一致しています。2つの知識ポイントは完全に接続されていないように見えますが、同じ「トラバーサル」要件のためにリンクされています。

だからここでもう少し言葉を言ってください。優れたプログラミング言語は、知識ポイントや文法規則の単なるパッチワークではなく、内部レベルまたは上位レベルでより普遍的な規則とロジックを備えている必要があります。

以前に学習したリストと文字列のインデックスとスライスを含む上記のポイントだけでなく、同じルールとパラメータシステムが使用されます。後で学習される多くのデータ型は、データ分析でさらに使用されます。複雑な多次元データ構造も、同じインデックス作成とスライスの原則に従います。

これには、Pythonを学ぶときに、基本的な概念を完全に理解して理解することと、異なる知識ポイント間の内部接続を同じルールシステムにリンクして、理解を深め、学習効率を向上させることが必要です。これは、「手をつないでPythonを学ぶ」シリーズの記事で、さまざまな状況が小さな知識ポイントとしてリストされていることが多い理由でもあり、誰もがその理由を完全に理解できます。時間が無駄になり、学習がつまらないように見えますが、いくつかの知識ポイントをつなげると、この方法の方が効率的で価値があることがわかります。

4.リスト要素の増加

上記のリストの変更の概要には、実際にリスト要素を追加する方法が含まれています。つまり、スライス後の変更により、リストの「任意」の位置に要素を追加することが間接的に実現されます。ただし、リスト要素を追加するために最も一般的に使用されるメソッドは、append()メソッドです。これは、リストの「最後」に新しい要素またはオブジェクトを追加するために使用されます。

では、10文字列関数「の学習のPythonあなたと」、私たちは、「機能」と「方法」との違いについて話しました。メソッドのオブジェクトはの前に書かれている間要するに、機能のオブジェクトは、括弧の中に書かれています名前。append()はメソッドであるため、操作するリストオブジェクトの名前リストはappendの前に記述し、リストの最後に追加する要素またはオブジェクトオブジェクトは括弧内に記述します。

list.append(object)

append()メソッドのオブジェクトパラメータには、数値、ブール値、文字列、リスト、変数などがありますが、パラメータは1つだけです。つまり、1つの操作で追加できる要素は1つだけです。リストの後ろ。

In [17]: list10 = [0, 1, 2, 3, 4, 5]
         list10.append(6)   # 先在列表末尾增加数字6
         list10.append('78')   # 之后在更新后的列表后面增加字符串'7'
         list10.append([9, 10])   # 最后再在更新后的列表增加列表[8, 9],此时的参数也只有一个
         list10
Out[17]: [0, 1, 2, 3, 4, 5, 6, '78', [9, 10]]
​
In [18]: list11 = [0, 1, 2, 3, 4, 5]
         list11.extend(1, 3)   # 当参数超过一个时报错
         list11
Out[18]: ---------------------------------------------------------------------------
         TypeError                                 Traceback (most recent call last)
         <ipython-input-14-8845285907af> in <module>
               1 list11 = [0, 1, 2, 3, 4, 5]
         ----> 2 list11.extend(1, 3)
               3 list11
               
         TypeError: extend() takes exactly one argument (2 given)

append()メソッドに加えて、リストの最後に要素を追加するためのextend()もあります。extend()メソッドは括弧内に1つのパラメーターしか含めることができません。append()とは異なり、extend()のパラメーターは「トラバース」する必要があり(スライス後のリストの変更と同様)、パラメーターは次のようになります。最初に変更されたデータは最小単位に分割され、複数の要素がリストの最後に一度に追加されます。数値やブール値などのデータ型は「トラバース」できないため、extend()のパラメーターとして使用することはできません。

list.extend(object)

In [19]: list12 = [0, 1, 2, 3, 4, 5]
         list12.extend('78')   # 先将字符串'78'拆分成'7'和'8',再添加到列表末尾
         list12.extend([9, 10])   # 之后将列表拆分成多个元素,在刚才更新后的列表后进行添加
         list12
Out[19]: [0, 1, 2, 3, 4, 5, '7', '8', 9, 10]
​
In [20]: list13 = [0, 1, 2, 3, 4, 5]
         list13.extend([6, 7], '8')   # 当参数超过一个时报错
         list13
Out[20]: ---------------------------------------------------------------------------
         TypeError                                 Traceback (most recent call last)
         <ipython-input-20-13fee015b48c> in <module>
               1 list13 = [0, 1, 2, 3, 4, 5]
         ----> 2 list13.extend([6, 7], '8')   # 当参数超过一个时报错
               3 list13
               
         TypeError: extend() takes exactly one argument (2 given)
         
In [21]: list14 = [0, 1, 2, 3, 4, 5]
         list14.extend(6)   # 当参数为一个不可被“遍历”的数据类型时报错
         list14
Out[21]: ---------------------------------------------------------------------------
         TypeError                                 Traceback (most recent call last)
         <ipython-input-23-f49cfc1155db> in <module>
               1 list14 = [0, 1, 2, 3, 4, 5]
         ----> 2 list14.extend(6)   # 当参数为一个不可被“遍历”的数据类型时报错
               3 list14
               
         TypeError: 'int' object is not iterable

5.リスト要素の削除

上記のリストの変更の概要には、リスト要素を削除する方法も含まれています。スライス後に「空のリスト」に変更することにより、リストの「任意」の位置にある要素を削除する目的を間接的に実現することです。ただし、リスト要素を削除するために最も一般的に使用される方法は、リストのインデックスまたはスライスを直接削除するために使用されるdelステートメントです。

デルリスト[a:b]

In [22]: list15 = [0, 1, 2, 3, 4, 5]
         del list15[2]   # 索引后删除一个元素
         list15
Out[22]: [0, 1, 3, 4, 5]
​
In [23]: list16 = [0, 1, 2, 3, 4, 5]
         del list16[2:4]   # 切片后删除多个元素
         list16
Out[23]: [0, 1, 4, 5]

delステートメントに加えて、リスト要素を削除するためのremove()メソッドもあります。これは、特定の値に一致するリスト内の最初に一致するアイテムを削除する方法です。つまり、delはリスト内の要素の位置に従って削除し、remove()は要素の値に従って削除します。同様に、remove()は1つのパラメーターしか持つことができません。

list.remove(object)

In [24]: list17 = [0, 1, 2, 3, 4, 5, 4, 3, 2, 1]
         list17.remove(3)   # 只删除与参数值相同的第一个匹配项
         list17
Out[24]: [0, 1, 2, 4, 5, 4, 3, 2, 1]
​
In [25]: list18 = [0, [1, 2], 3, 4, 5, 4, 3, [1, 2]]
         list18.remove([1, 2])   # 只删除与参数值相同的第一个匹配项
         list18
Out[25]: [0, 3, 4, 5, 4, 3, [1, 2]]

6、リストの計算

リストの計算は、実際には私が今言ったことです。これは、Pythonの高レベルの統一ルールに従い、リストの特定の構文要件ではなく、文字列の計算と一致しています。

In [26]: [1, 2, 3] + [4, 5, 6]   # 与字符串一样,+也是拼接运算
Out[26]: [1, 2, 3, 4, 5, 6]
​
In [27]: [1, 2, 3] * 3   # *也是重复输出
Out[27]: [1, 2, 3, 1, 2, 3, 1, 2, 3]
​
In [28]: [1, 2, 3] == [1, 2, 3]   # 比较运算,要完全相同
Out[28]: True
​
In [29]: [1, 2, 3] != [1, 2, 3]   # 比较运算
Out[29]: False
​
In [30]: [2, 2, 3] > [1, 2, 2, 4]   # 比较运算,只比较第一个元素
Out[30]: True
​
In [31]: 1 in [1, 2, 3]   # 成员运算
Out[31]: True
​
In [32]: 1 not in [1, 2, 3]   # 成员运算
Out[32]: False
​
In [33]: [1, 2, 3] is [1, 2, 3]   # 身份运算,值相同,但内存地址不同,具体请参见《手把手陪您学Python》13——运算
Out[33]: False

7、リストの機能

次の表に、一般的に使用される4つのリスト関数を示します。まだ使用していない4番目の関数を除いて、他の関数をプログラムに適用できます。特に、リスト内の要素の数をカウントする関数len()は、将来よく使用するものであり、forループと組み合わせて使用​​されることがよくあります。

シリアルナンバー

関数

効果

1

亜麻(リスト)

リスト要素の数を返します

2

max(list)

リスト要素の最大値を返します

3

min(リスト)

リスト要素の最小値を返します

4

list(seq)

タプルをリストに変換する

In [34]: day_lst = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
         for i in range(len(day_lst)):
             print("每周的第{}天是{}。".format(i+1,day_lst[i]))
Out[34]: 每周的第1天是星期日。
         每周的第2天是星期一。
         每周的第3天是星期二。
         每周的第4天是星期三。
         每周的第5天是星期四。
         每周的第6天是星期五。
         每周的第7天是星期六。
         
In [35]: list19 = [1, 2, 3]
         print("由数字组成的列表,最大值和最小值是按照ASCII码从小到大排序的,因此list19的最大值是{},最小值是{}。".format(max(list19), min(list19)))
Out[35]: 由数字组成的列表,最大值和最小值是按照ASCII码排序的,因此list19的最大值是3,最小值是1。
​
In [36]: list20 = ['a', 'b', 'c']
         print("由字符串组成的列表,最大值和最小值也是按照ASCII码从小到大排序的,因此list20的最大值是{},最小值是{}。".format(max(list20), min(list20)))
Out[36]: 由字符串组成的列表,最大值和最小值也是按照ASCII码从小到大排序的,因此list20的最大值是c,最小值是a。
​
In [37]: list21 = ['手', '把', '手', '陪', '您', '学']
         print("由中文组成的列表,最大值和最小值是按照unicode从小到大排序的,因此list21的最大值是{},最小值是{}。".format(max(list21), min(list21)))
Out[37]: 由中文组成的列表,最大值和最小值是按照unicode从小到大排序的,因此list21的最大值是陪,最小值是a。
​
In [38]: list22 = ['手', '把', '手', '陪', '您', '学', 'a', 'b', 'c']
         print("字符串只能和字符串比较,因此list22的最大值是{},最小值是{}。".format(max(list22), min(list22)))
Out[38]: 字符串只能和字符串比较,因此list22的最大值是陪,最小值是a。
​
In [39]: list23 = ['手', '把', '手', '陪', '您', '学', 1, 2, 3]
         max(list23)   # 字符串和数字不能混合比较
Out[39]: ---------------------------------------------------------------------------
         TypeError                                 Traceback (most recent call last)
         <ipython-input-30-bd7a314f9f23> in <module>
               1 list23 = ['手', '把', '手', '陪', '您', '学', 1, 2, 3]
         ----> 2 max(list23)
         
         TypeError: '>' not supported between instances of 'int' and 'str'
​
In [40]: list24 = [[1, 2, 3], [2, 2, 1]]
         print("列表间的比较也是根据列表中第一个字符的值进行比较,因此list24的最大值是{},最小值是{}。".format(max(list24), min(list24)))
Out[40]: 列表间的比较也是根据列表中第一个字符的值进行比较,因此list24的最大值是[2, 2, 1],最小值是[1, 2, 3]。

8.リスト方式

ちょうど今、append()とremove()の2つのリストメソッドを学びました。これらはそれぞれリスト要素の追加とリスト要素の削除です。次の表には、他の9つのリストメソッドもリストされています。より一般的に使用されるメソッドの例については、後で説明します。まだ説明されていない他の方法については、自分で試してみてください。Pythonを長い間学んだ後でできると思います。

 

シリアルナンバー

方法

方法

1

list.append(obj)

リストの最後に新しいオブジェクトを追加します

2

list.count(obj)

要素がリストに表示される回数を数えます

3

list.extend(seq)

リストの最後に別のシーケンスから複数の値を一度に追加します(元のリストを新しいリストで展開します)

4

list.index(obj)

リストから値の最初の一致のインデックス位置を見つけます

5

list.insert(index、obj)

リストにオブジェクトを挿入します

6

list.pop([index = -1])

リストから要素(デフォルトでは最後の要素)を削除し、要素の値を返します

7

list.remove(obj)

リスト内の値の最初の出現を削除します

8

list.reverse()

リスト内の要素を逆にします

9

list.sort(cmp = None、key = None、reverse = False)

元のリストを並べ替える

10

list.clear()

リストをクリアする

11

list.copy()

リストをコピーする

In [41]: list25 = ['《', '手', '把', '手', '陪', '您', '学', 'P', 'y', 't', 'h', 'o', 'n', '》']
         list25.sort()   # 与比较运算一样,同样类型的元素内部才能够排序
         list25
Out[41]: ['P', 'h', 'n', 'o', 't', 'y', '《', '》', '学', '您', '手', '手', '把', '陪']
​
In [42]: list26 = ['《', '手', '把', '手', '陪', '您', '学', 'P', 'y', 't', 'h', 'o', 'n', '》']
         list26.index('P')
Out[42]: 7
​
In [43]: list27 = [1, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3]
         list27.count(3)
Out[43]: 3
​
In [44]: list28 = [0, 1, 2, 3, 4, 5]
         list28.insert(3, 'Python')
         list28
Out[44]: [0, 1, 2, 'Python', 3, 4, 5]
​
In [45]: list29 = [0, 1, 2, 3, 4, 5]
         list29.pop(3)
         list29
Out[45]: [0, 1, 2, 4, 5]

以上がPythonリストの関連コンテンツの紹介です。内容は多いようですが、1つの記事ですべて紹介します。これは、これまでに紹介した文字列や操作などの内容の多くがリストに適用できるため、リストの学習に手間がかからず、基本的な概念から学ぶ必要がなく、いくつかの例で理解できるためです。 。非常に明確です。

これは私たちの学習の結果であると言えます!そして、後で学ぶほど、この種の経験はますます強くなるので、私たちが後でよりよく学び、適用できるように、誰もが最初の段階のすべての内容を理解する必要があります。

次の記事では、タプルを紹介します。タプルは変更が許可されていないリストと見なすことができるため、多くのプロパティとメソッドはリストとまったく同じであるため、学習は非常に簡単です。しばらくお待ちください。

 

 


この記事を読んでくれてありがとう!ご不明な点がございましたら、メッセージを残してご相談ください^ _ ^

以下のQRコードをスキャンすることを歓迎します。「YesuoPython」公式アカウントをフォローするか、「Learning Python with You Hand in Hand」シリーズの他の記事を読むか、以下のリンクをクリックして直接アクセスしてください。

「手をつないでPythonを学ぶ」1-なぜPythonを学ぶのか?

「手をつないでPythonを学ぶ」2-Pythonのインストール

「手をつないでPythonを学ぶ」3-PyCharmのインストールと構成

「手をつないでPythonを学ぶ」4-HelloWorld!

「手をつないでPythonを学ぶ」5-JupyterNotebook

「手をつないでPythonを学ぶ」6文字の識別

「手をつないでPythonを学ぶ」7-文字列のインデックス

「手をつないでPythonを学ぶ」8弦スライシング

「手をつないでPythonを学ぶ」9弦操作

「手をつないでPythonを学ぶ」10文字列関数

「手をつないでPythonを学ぶ」11-文字列のフォーマットされた出力

「手をつないでPythonを学ぶ」12-数字

「手をつないでPythonを学ぶ」13-操作

「手をつないでPythonを学ぶ」14-インタラクティブな入力

「手をつないでPythonを学ぶ」15-判断の声明

「手をつないでPythonを学ぶ」16ループステートメント

「手をつないでPythonを学ぶ」17-ループの終わり

「手をつないでPythonを学ぶ」18ループステートメント

「手をつないでPythonを学ぶ」19-第1段階の概要

ファンの方へ:「Pythonも言った」パブリックアカウントをフォローし、「Hand 20」と返信すると、この記事で使用されている例文を無料でダウンロードできます。

Pythonについても話します-Python愛好家のための学習と共有の領域

 

おすすめ

転載: blog.csdn.net/mnpy2019/article/details/100020403