ホームページ  >  記事  >  バックエンド開発  >  Python3でのlistメソッドの具体的な実装例

Python3でのlistメソッドの具体的な実装例

黄舟
黄舟オリジナル
2017-10-09 10:38:091515ブラウズ

Python3 のリスト シーケンスは、Python の最も基本的なデータ構造です。次の記事では、Python3 の学習ノートのリスト メソッドに関する関連情報を主に紹介します。この記事では、サンプル コードを通じてそれを詳細に紹介します。これは、誰にとっても重要です。勉強や仕事の参考学習値、必要な友人が参照できます。

はじめに

この記事では主に Python3 の list メソッドに関する関連内容を紹介し、参考と学習のために共有します。以下では多くを述べません。詳細な紹介を見てみましょう。

1 [] または list() を使用してリストを作成します


user = []
user = list()

2 list() を使用して他の型をリストに変換します


# 将字符串转成列表
>>> list('abcde')
['a', 'b', 'c', 'd', 'e']

# 将元祖转成列表
>>> list(('a','b','c'))
['a', 'b', 'c']

3 use [offset] 要素の取得または要素の変更


>>> users = ['a','b','c','d','e']
# 可以使用整数来获取某个元素
>>> users[0]
'a'
# 可以使用负整数来表示从尾部获取某个元素
>>> users[-1]
'e'

# 数组越界会报错
>>> users[100]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> users[-100]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list index out of range

# 修改某个元素
>>> users[0] = &#39;wdd&#39;
>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]
>>>

4 リストのスライスと要素の抽出

リストをスライスまたは抽出しても、リストのままです

: list [start:end:step]list[start:end:step]


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]
# 正常截取 注意这里并不会截取到users[2]
>>> users[0:2]
[&#39;wdd&#39;, &#39;b&#39;]
# 也可从尾部截取
>>> users[0:-2]
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;]
# 这样可以获取所有的元素
>>> users[:]
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]
# 也可以加上步长参数
>>> users[0:4:2]
[&#39;wdd&#39;, &#39;c&#39;]
# 也可以通过这种方式去将列表取反
>>> users[::-1]
[&#39;e&#39;, &#39;d&#39;, &#39;c&#39;, &#39;b&#39;, &#39;wdd&#39;]

# 注意切片时,偏移量可以越界,越界之后不会报错,仍然按照界限来处理 例如开始偏移量如果小于0,那么仍然会按照0去计算。
>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]
>>> users[-100:3]
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;]
>>> users[-100:100]
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]
>>>

5 使用append()添加元素至尾部

形式如:list.append(item)


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;]
>>> users.append(&#39;ddw&#39;)
>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;]

6 使用extend()或+=合并列表

形式如:list1.extend(list2)

这两个方法都会直接修改原列表


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;]
>>> names
[&#39;heihei&#39;, &#39;haha&#39;]
>>> users.extend(names)
>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;]
>>> users += names
>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;haha&#39;]

7 使用insert()在指定位置插入元素

形式如:list.insert(offset, item)

insert也不存在越界的问题,偏移量正负都行,越界之后会自动伸缩到界限之内,并不会报错


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;haha&#39;]
>>> users.insert(0,&#39;xiaoxiao&#39;)
>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;haha&#39;]
>>> users.insert(-1,&#39;-xiaoxiao&#39;)
>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
# 下面-100肯定越界了
>>> users.insert(-100,&#39;-xiaoxiao&#39;)
>>> users
[&#39;-xiaoxiao&#39;, &#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
# 下面100也是越界了
>>> users.insert(100,&#39;-xiaoxiao&#39;)
>>> users
[&#39;-xiaoxiao&#39;, &#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;, &#39;-xiaoxiao&#39;]

8 使用del删除某个元素

形式如:del list[offset]

del是python的语句,而不是列表的方法,del删除不存在的元素时,也会提示越界


>>> users
[&#39;-xiaoxiao&#39;, &#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;, &#39;-xiaoxiao&#39;]
>>> del users[0]
>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;, &#39;-xiaoxiao&#39;]
>>> del users[100]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> del users[-100]
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

9 使用remove删除具有指定值的元素

形式如:list.remove(value)


>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;, &#39;-xiaoxiao&#39;]
# 删除指定值&#39;c&#39;
>>> users.remove(&#39;c&#39;)
>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;, &#39;-xiaoxiao&#39;]
# 删除不存在的值会报错
>>> users.remove(&#39;alsdkfjalsdf&#39;)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
# 如果该值存在多个,那么只能删除到第一个
>>> users.remove(&#39;haha&#39;)
>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;, &#39;-xiaoxiao&#39;]

10 使用pop()方式返回某个元素后,并在数组里删除它

形式如:list.pop(offset=-1) 偏移量默认等于-1,也就是删除最后的元素


>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;, &#39;-xiaoxiao&#39;]
# 删除最后的元素
>>> users.pop()
&#39;-xiaoxiao&#39;
>>> users
[&#39;xiaoxiao&#39;, &#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
# 如果列表本身就是空的,那么pop时会报错
>>> user.pop(0)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: pop from empty list
>>> users.pop(0)
&#39;xiaoxiao&#39;
>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
# 越界时也会报错
>>> users.pop(100)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: pop index out of range

11 使用index()查询具有特定值的元素位置

形式如:list.index(value)


# index只会返回第一遇到该值得位置
>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
>>> users.index(&#39;heihei&#39;)
5

# 如果该值不存在,也会报错
>>> users.index(&#39;laksdf&#39;)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: &#39;laksdf&#39; is not in list

12 使用in判断值是否存在列表

形式如:value in list


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
>>> &#39;wdd&#39; in users
True

13 使用count()记录特定值出现的次数

形式如:list.count(value)


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
>>> users.count(&#39;heihei&#39;)
2
>>> users.count(&#39;h&#39;)
0

14 使用join()将列表转为字符串

形式如:string.join(list)


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
>>> &#39;,&#39;.join(users)
&#39;wdd,b,d,e,ddw,heihei,heihei,-xiaoxiao,haha&#39;
>>> user
[]
>>> &#39;,&#39;.join(user)
&#39;&#39;

15 使用sort()重新排列列表元素

形式如:list.sort()


>>> users
[&#39;wdd&#39;, &#39;b&#39;, &#39;d&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;-xiaoxiao&#39;, &#39;haha&#39;]
# 默认是升序排序
>>> users.sort()
>>> users
[&#39;-xiaoxiao&#39;, &#39;b&#39;, &#39;d&#39;, &#39;ddw&#39;, &#39;e&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;wdd&#39;]
# 加入reverse=True, 可以降序排序
>>> users.sort(reverse=True)
>>> users
[&#39;wdd&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;d&#39;, &#39;b&#39;, &#39;-xiaoxiao&#39;]

# 通过匿名函数,传入函数进行自定义排序
>>> students
[{&#39;name&#39;: &#39;wdd&#39;, &#39;age&#39;: 343}, {&#39;name&#39;: &#39;ddw&#39;, &#39;age&#39;: 43}, {&#39;name&#39;: &#39;jik&#39;, &#39;age&#39;: 90}]
>>> students.sort(key=lambda item: item[&#39;age&#39;])
>>> students
[{&#39;name&#39;: &#39;ddw&#39;, &#39;age&#39;: 43}, {&#39;name&#39;: &#39;jik&#39;, &#39;age&#39;: 90}, {&#39;name&#39;: &#39;wdd&#39;, &#39;age&#39;: 343}]
>>> students.sort(key=lambda item: item[&#39;age&#39;], reverse=True)
>>> students
[{&#39;name&#39;: &#39;wdd&#39;, &#39;age&#39;: 343}, {&#39;name&#39;: &#39;jik&#39;, &#39;age&#39;: 90}, {&#39;name&#39;: &#39;ddw&#39;, &#39;age&#39;: 43}]
>>>

16 使用reverse()将列表翻转

形式如:list.reverse()


>>> users
[&#39;wdd&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;haha&#39;, &#39;e&#39;, &#39;ddw&#39;, &#39;d&#39;, &#39;b&#39;, &#39;-xiaoxiao&#39;]
>>> users.reverse()
>>> users
[&#39;-xiaoxiao&#39;, &#39;b&#39;, &#39;d&#39;, &#39;ddw&#39;, &#39;e&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;wdd&#39;]

17 使用copy()复制列表

形式如:list2 = list1.copy()

list2 = list1 这种并不是列表的复制,只是给列表起了别名。实际上还是指向同一个值。


>>> users
[&#39;-xiaoxiao&#39;, &#39;b&#39;, &#39;d&#39;, &#39;ddw&#39;, &#39;e&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;wdd&#39;]
>>> users2 = users.copy()
>>> users2
[&#39;-xiaoxiao&#39;, &#39;b&#39;, &#39;d&#39;, &#39;ddw&#39;, &#39;e&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;wdd&#39;]
>>>

18 使用clear()清空列表

形式如: list.clear()


>>> users2
[&#39;-xiaoxiao&#39;, &#39;b&#39;, &#39;d&#39;, &#39;ddw&#39;, &#39;e&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;wdd&#39;]
>>> users2.clear()
>>> users2
[]

19 使用len()获取列表长度

形式如:len(list)


>>> users
[&#39;-xiaoxiao&#39;, &#39;b&#39;, &#39;d&#39;, &#39;ddw&#39;, &#39;e&#39;, &#39;haha&#39;, &#39;heihei&#39;, &#39;heihei&#39;, &#39;wdd&#39;]
>>> len(users)
9

20 关于列表越界的深入思考

写了这些方法后,我有一些疑问,为什么有些操作会提示越界,有些则不会呢?

会提示偏移量越界的操作有

  • list[offset] 读取或者修改某个元素

  • del list[offset]

    🎜🎜rrreee🎜🎜🎜5 append() を使用して末尾に要素を追加します🎜🎜🎜🎜🎜次のようなフォーム: list.append( item)🎜 🎜🎜🎜rrreee🎜🎜🎜6 リストを結合するには、extend() または += を使用します🎜🎜🎜🎜🎜 次のような形式: list1.extend(list2)🎜🎜🎜これら 2 つのメソッドは、元のリストを直接変更します 🎜🎜🎜🎜rrreee🎜🎜🎜7 指定された位置に要素を挿入するには、insert() を使用します 🎜🎜🎜🎜🎜 次のような形式: list.insert(offset, item) 🎜🎜🎜insert も範囲外ではありません。質問、オフセットは正または負の場合があります。境界を越えると、自動的に境界内にスケールされ、エラーは報告されません🎜🎜🎜🎜rrreee🎜🎜。 🎜8 del を使用して要素を削除します🎜🎜🎜🎜🎜 形式は次のとおりです: del list[offset]🎜🎜🎜del はリストメソッドではなく、Python ステートメントです。存在する要素がある場合は、範囲外のプロンプトも表示されます🎜🎜🎜🎜rrreee🎜🎜🎜9 指定された要素を削除するには、remove を使用します。 value 要素 🎜🎜🎜🎜🎜 の形式は、 list.remove(value) code>🎜🎜🎜🎜rrreee🎜🎜🎜10 Pop() メソッドを使用して要素を返し、配列内の要素を削除します🎜🎜🎜🎜🎜形式は次のようなものです: <code>list.pop(offset=-1) デフォルトでは、オフセットは -1 に等しく、最後の要素が削除されることを意味します🎜🎜🎜🎜rrreee🎜🎜🎜11 Index( ) を使用して、特定の値で要素の位置をクエリします🎜🎜🎜🎜🎜フォーム<code>list.index(value) のようなものです: value のような形式です: <code>value in list🎜🎜🎜🎜rrreee🎜🎜🎜13 count() を使用して、特定の値が出現した回数を記録します🎜🎜🎜🎜🎜形式は次のようなものです: list.count(value) / code>🎜🎜🎜🎜rrreee🎜🎜🎜14 join()を使用してリストを文字列に変換します🎜🎜🎜🎜🎜形式は次のようになります: <code>string.join(list)🎜🎜🎜🎜rrreee 🎜🎜 🎜15 sort() を使用してリスト要素を並べ替えます🎜🎜🎜🎜🎜次のような形式: list.sort()🎜🎜🎜🎜rrreee🎜🎜🎜16 reverse() を使用してリストを反転します🎜 🎜🎜🎜 🎜次のような形式: list.reverse()🎜🎜🎜🎜rrreee🎜🎜🎜17 copy() を使用してリストをコピーします🎜🎜🎜🎜🎜 次のような形式: list2 = list1 .copy()🎜🎜🎜list2 = list1 これはリストのコピーではなく、リストにエイリアスを与えるだけです。実際、それは依然として同じ値を指します。 🎜🎜🎜🎜rrreee🎜🎜🎜18 リストをクリアするには、clear() を使用します🎜🎜🎜🎜🎜次のようなフォーム: list.clear()🎜🎜🎜🎜rrreee🎜🎜🎜19 len() を使用しますリストを取得するには、長さ 🎜🎜🎜🎜🎜 の形式は次のとおりです: len(list)🎜🎜🎜🎜rrreee🎜🎜🎜20 範囲外のリストについての深い考察🎜🎜🎜 🎜🎜これらのメソッドを作成した後、いくつかの質問があります。なぜ一部の操作では範囲外のプロンプトが表示され、他の操作ではプロンプトが表示されないのですか? 🎜🎜オフセットが境界を超えるように促す操作には、🎜
    • 🎜list[offset] 要素の読み取りまたは変更🎜 li >
    • 🎜del list[offset] 指定した位置の要素を削除します🎜
    • list.remove(value) 指定した値の要素を削除します list.remove(value) 删除指定值的元素

    • list.pop(offset)

    list.pop(offset) 指定した位置の要素を削除します


    オフセットの場合 金額が制限を超える場合、これらのメソッドはエラーを報告します。私の個人的な理解は次のとおりです:

    オフセット 10 の要素を読み取りたいが、その要素が存在しない場合、システムがエラーを報告せずに自動的にリストの最後の要素を読み取る場合、これは不可能です。バグを許容します。 10 番目の要素を削除したいのに、10 番目の要素が存在せず、システムがリストの最後の要素を削除する場合、これは耐えられないと思います。

    そのため、これらのメソッドを使用する場合は、オフセットの要素が存在するかどうかを必ず確認してください。存在しない場合、エラーが報告される可能性があります。

    概要🎜🎜🎜

以上がPython3でのlistメソッドの具体的な実装例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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