Pythonリストデータ型を操作する方法

Pythonには、一般的なデータラングリング操作を簡単にする組み込みデータ型のコレクションが付属しています。その中には、シンプルでありながら用途の広いコレクションタイプであるリストがあり ます。Pythonリストを使用すると、Pythonオブジェクトを1次元の行にグループ化して、オブジェクトに位置、追加、削除、並べ替え、および細分化してアクセスできるようにすることができます。

Pythonリストの基本

Pythonでリストを定義するのは簡単です。ブラケット構文を使用して、リスト内の項目を示すだけです。

list_of_ints = [1、2、3]

リスト内のアイテムも、すべて同じタイプである必要はありません。それらは任意のPythonオブジェクトにすることができます。(ここでは、仮定 Three は関数です。)

list_of_objects = ["One"、TWO、Three、{"Four":4}、なし]

リストにオブジェクトが混在していると、リストの並べ替えに影響する可能性があることに注意してください。これについては後で説明します。

リストを使用する最大の理由は、リスト内の位置によってオブジェクトを検索できるようにすることです。これを行うには、Pythonのインデックス表記法を使用します。リスト内のアイテムの位置を示す0から始まる括弧内の数値です。

上記の例では、をlist_of_ints[0]生成し1ます。list_of_ints[1]を生成し2ます。 オブジェクトlist_of_objects[4]になり Noneます。

Pythonリストのインデックス作成

インデックスに正の整数を使用する場合、整数は検索するアイテムの位置を示します。ただし、負の 整数を使用する場合 、整数は リストの最後から始まる位置を示し ます。たとえば、のインデックスを使用する-1と、リストのサイズに関係なく、リストから最後のアイテムを取得するのに便利な方法です。

list_of_ints[-1] を生成し 3ます。 list_of_objects[-1] を生成し Noneます。

整数変数をインデックスとして使用することもできます。の場合 x=0list_of_ints[x] 1を生成し、以下同様に 続きます。

Pythonリストアイテムの追加と削除

Pythonには、リストにアイテムを追加またはリストから削除する方法がいくつかあります。

  • .append() リスト の最後にアイテムを挿入します 。たとえば、list_of_ints.append(4)は list_of_ints リストになります [1,2,3,4]。追加は高速で効率的です。リストの長さに関係なく、1つのアイテムをリストに追加するのにほぼ同じ時間がかかります。
  • .pop() リストから最後のアイテムを削除して返します。x = list_of_ints.pop() 元のを実行した 場合 list_of_ints、xには値が含まれます 3。(.pop() ただし、必要がない場合は、の結果を値に割り当てる 必要はありません。) .pop()操作も高速で効率的です。
  • .insert() リスト内の任意の位置にアイテムを挿入します。例えば、 list_of_ints.insert(0,10) 電源を入れます list_of_ints[10,1,2,3]。リストの先頭に近づけるほど、この操作は遅くなりますが、リストに数千の要素があるか、タイトなループで挿入を行っていない限り、速度の低下はあまり見られません。
  • .pop(x) インデックスのアイテムを削除します x。したがって list_of_ints.pop(0) 、インデックス0のアイテムを削除します。ここでも、リストの先頭に近づくほど、この操作が遅くなる可能性があります。
  • .remove(item) リストからアイテムを削除しますが、 そのインデックスに基づいてい ません。むしろ、 リストの一番上から下に検索して、指定したオブジェクトの最初の出現.remove()削除 します。の場合 、最初のもの  が削除され、リストが作成され ます。この操作も、理論的にはリスト全体をトラバースする必要があるため、大きなリストの場合は速度が低下する可能性があります。[3,7,7,9,8].remove(7)7[3,7,9,8]

Pythonリストのスライス

リストは、スライスと呼ばれるプロセスである新しいリストに分割できます 。Pythonのスライス構文を使用すると、リストのどの部分を切り取るか、および切り取った部分を操作する方法を指定できます。

ブラケット表記を使用してリストから単一の項目を取得する方法を上で説明しましたmy_list[2]。たとえば、。スライスは、同じインデックス表記のバリアントを使用します(そして、同じインデックス規則に従います)list_object[start:stop:step]

  • start スライスを開始するリスト内の位置です。 
  • stop リスト内でスライスを停止する位置です。つまり、 その位置とそれ以降のすべて が省略されます。
  • step スライスのオプションの「n番目ごとの要素」インジケータです。デフォルトではこれは 1であるため、スライスはスライス元のリストのすべての要素を保持します。に設定stepすると 2、1つおきの要素が選択されます。

下記は用例です。このリストを検討してください:

スライスリスト= [1,2,3,4,5,6,7,8,9,0]

スライスリスト[0:5] = [1、2、3、4、5]

(インデックス5ではなくインデックス4で停止していることに注意してください!)

スライスリスト[0:5:2] = [1、3、5]

特定のスライスインデックスを省略すると、Pythonがデフォルトを想定します。開始インデックスを省略します。Pythonはリストの開始を想定します。

スライスリスト[:5] = [1、2、3、4、5]

ストップインデックスを省くと、Pythonはリストの最後を想定します。

スライスリスト[4:] = [5、6、7、8、9、0]

step 要素もでき ネガティブ。これにより、元のコピーを逆にしたスライスを取得できます。

スライスリスト[::-1] = [0、9、8、7、6、5、4、3、2、1]

順方向ではなく逆方向に進む開始インデックスと停止インデックスを使用して、逆にスライスできることに注意してください。

スライスリスト[5:2:-1] = [6、5、4]

また、リストのスライスは 元のリストのコピーであることに注意して ください。元のリストは変更されません。 

[また、検疫中の最高の無料データサイエンスコース]

Pythonリストの並べ替え

Python provides two ways to sort lists: You can generate a new, sorted list from the old one, or you can sort an existing list in-place. These options have different behaviors and different usage scenarios.

To create a new, sorted list, use the sorted() function on the old list:

new_list = sorted(old_list)

This will sort the contents of the list using Python’s default sorting methods. For strings, the default is alphabetical order; for numbers, it’s ascending values. Note that the contents of the list need to be consistent for this to work. For instance, you can’t sort a mix of integers and strings, but you can sort a list that is all integers or all strings. Otherwise you’ll get a TypeError in the sort operation.

If you want to sort a list in reverse, pass the reverse parameter:

new_list = sorted(old_list, reverse=True)

The other way to sort, in-place sorting, performs the sort operation directly on the original list. To do this, use the list’s .sort()method:

old_list.sort()

.sort() also takes reverse as a parameter, allowing you to sort in reverse.

Both sorted() and .sort() also take a key parameter. The key parameter lets you provide a function that can be used to perform a custom sorting operation. When the list is sorted, each element is passed to the key function, and the resulting value is used for sorting. For instance, if we had a mix of integers and strings, and we wanted to sort them, we could use key like this:

mixed_list = [1,"2",3,"4", None] def sort_mixed(item): try: return int(item) except: return 0 sorted_list = sorted(mixed_list, key = sort_mixed) print (sorted_list)

Note that this code wouldn’t convert each element of the list into an integer! Rather, it would use the integer value of each item as its sort value. Also note how we use a try/except block to trap any values that don’t translate cleanly into an integer, and return 0 for them by default.

Python lists are not arrays

One important thing to know about lists in Python is that they aren’t “arrays.” Other languages, like C, have one-dimensional or multi-dimensional constructions called arrays that accept values of a single type. Lists are heterogenous; they can accept objects of any type.

What’s more, there is a separate array type in Python. The Python array is designed to emulate the behavior of an array in C, and it’s meant chiefly to allow Python to work with C arrays. The array type is useful in those cases, but in almost every pure-Python case you’ll want to use lists.

When to use Python lists (and when not to)

So when are Python lists most useful? A list is best when:

  • You need to find things quickly by their position in a collection. Accessing any position in a list takes the same amount of time, so there is no performance penalty for looking up even the millionth item in a list.
  • You’re adding and removing to the collection mainly by appending to the end or removing from the end, in the manner of a stack. Again, these operations take the same amount of time regardless of the length of the list.

A Python list is less suitable when:

  • You want to find an item in a list, but you don’t know its position. You can do this with the .index() property. For instance, you could use list_of_ints.index(1) to find the index of the first occurrence of the number 1 in list_of_ints. Speed should not be not an issue if your list is only a few items long, but for lists thousands of items long, it means Python has to search the entire list. For a scenario like this, use a dictionary, where each item can be found using a key, and where the lookup time will be the same for each value.
  • You want to add or remove items from any position but the end. Each time you do this, Python must move every other item after the added or removed item. The longer the list, the greater the performance issue this becomes. Python’s deque object is a better fit if you want to add or remove objects freely from either the start or the end of the list.

How to do more with Python

  • How to package Python apps with BeeWare Briefcase
  • How to run Anaconda side by side with other Pythons
  • How to use Python dataclasses
  • Get started with async in Python
  • How to use asyncio in Python
  • 3 steps to a Python async overhaul
  • How to use PyInstaller to create Python executables
  • Cython tutorial: How to speed up Python
  • How to install Python the smart way
  • How to manage Python projects with Poetry
  • How to manage Python projects with Pipenv
  • Virtualenvとvenv:Python仮想環境の説明
  • Pythonvirtualenvとvenvはすべきこととすべきでないこと
  • Pythonのスレッド化とサブプロセスの説明
  • Pythonデバッガーの使用方法
  • timeitを使用してPythonコードをプロファイリングする方法
  • cProfileを使用してPythonコードをプロファイリングする方法
  • PythonをJavaScriptに変換する方法(そしてまた元に戻す方法)