Pythonにおけるlist関数の基礎知識と使い方9選

Pythonにおけるlist関数の使い方Python
この記事は約12分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●Pythonのlist関数とは?

Pythonを学び始めた皆さん、リストを扱う際に欠かせない存在といえば「list関数」ですよね。

でも、いざ使おうとすると「引数の指定方法がわからない」「エラーが出てしまった」といった壁にぶつかってしまうこともあるかもしれません。

そんな初心者の方でも、list関数の使い方をマスターできるように、この記事ではlist関数の基本から応用までを丁寧に解説していきます。

コードのサンプルを交えながら、一緒に学んでいきましょう。

list関数は、新しいリストを生成するための組み込み関数です。

様々な方法で呼び出すことができ、用途に合わせて使い分けることが大切になります。

まずは基本的な使い方から見ていきましょう。

○list関数の基本的な使い方

list関数の最もシンプルな使い方は、引数を指定せずに呼び出すことです。

これで、空のリストを生成できます。

○サンプルコード1:空のリストを作成する

次のように、list()とするだけで空のリストを作ることができるんです。

empty_list = list()
print(empty_list)

実行結果

[]

print()で出力してみると、空のリスト[]が表示されましたね。

これが、list関数で生成された空のリストです。

○サンプルコード2:要素を指定してリストを作成する

次に、list関数の引数に様々なオブジェクトを渡して、リストを作ってみましょう。

numbers = list(range(1, 6))
print(numbers)

characters = list("Hello")
print(characters)

実行結果

[1, 2, 3, 4, 5]
['H', 'e', 'l', 'l', 'o']

1つ目の例では、range(1, 6)でイテラブルオブジェクトを生成し、それをlist関数に渡すことで[1, 2, 3, 4, 5]のようなリストを得ています。

2つ目の例では、文字列”Hello”をlist関数に渡しています。

すると、文字列が1文字ずつ分割され、[‘H’, ‘e’, ‘l’, ‘l’, ‘o’]のような文字のリストになりました。

このように、list関数はイテラブルオブジェクトを引数にとり、そこから新しいリストを生成してくれるのです。

●list関数の引数について

さて、list関数の基本的な使い方は理解できましたね。

でも、引数の指定方法によってはもっと柔軟にリストを生成することができるんです。

引数の使い方を理解することで、list関数の可能性が大きく広がります。

実際のコードを見ながら、一緒に学んでいきましょう。

○引数の指定方法

list関数には、リストの要素を直接指定する方法以外にも、様々な引数の指定方法があります。

例えば、要素数を指定してリストを作成したり、他の関数と組み合わせてリストを生成したりすることができるんです。

柔軟な引数指定により、状況に応じた最適なリスト生成が可能になります。

○サンプルコード3:引数を指定してリストを作成する

要素数を指定し、各要素に初期値を設定してリストを作成してみましょう。

# 要素数5、初期値0のリストを作成
initialized_list = [0] * 5
print(initialized_list)

# 要素数3、初期値"empty"のリストを作成
empty_strings = ["empty"] * 3
print(empty_strings)

実行結果

[0, 0, 0, 0, 0]
['empty', 'empty', 'empty']

要素数を指定し、各要素に初期値を設定することで、まとまった数の要素を持つリストを簡単に作ることができました。

これは、リストのリスト内包表記と組み合わせることでより柔軟なリスト生成が可能になります。

○サンプルコード4:map関数の結果をリストに変換する

組み込み関数のmap()と組み合わせることで、リストの各要素に関数を適用した結果を新しいリストとして生成できます。

numbers = [1, 2, 3, 4, 5]

# 各要素を2倍した値を持つリストを作成
doubled_numbers = list(map(lambda x: x * 2, numbers))
print(doubled_numbers)

実行結果

[2, 4, 6, 8, 10]

map()関数は、指定された関数を各要素に適用したイテレータを返します。

このイテレータをlist()で囲むことで、新しいリストを生成しているのです。

lambda式を使って、各要素を2倍する無名関数を定義し、map()に渡しています。

これで、元のリストの各要素を2倍した値を持つ新しいリストが作成されました。

○サンプルコード5:2次元リストを作成する

2次元リストも、list関数を使って簡単に作ることができます。

# 3行4列の2次元リストを作成
matrix = [["*"] * 4 for _ in range(3)]
print(matrix)

実行結果

[['*', '*', '*', '*'], 
 ['*', '*', '*', '*'], 
 ['*', '*', '*', '*']]

リスト内包表記を使って、3行4列の2次元リストを作成しています。

外側のリスト内包表記でrange(3)を使って3回繰り返し、内側のリスト内包表記で[“*”] * 4により、各行に4つの”*”を持つリストを作成しています。

アンダースコア(_)は、ループ内で使用しない変数を示すために使われる慣例です。

これで、行のインデックスを明示的に使用する必要がありません。

●よくあるエラーと対処法

list関数を使っていると、時々エラーに遭遇することがありますよね。

でも、エラーメッセージの意味がわからないと、なかなか解決策が見つからないものです。

ここでは、初心者の方がよくつまずくエラーについて、原因と対処法を詳しく解説していきます。

エラーに立ち向かう勇気を持って、一緒に乗り越えていきましょう!

○’list’ object is not callableエラーの原因と対処法

次のようなコードを実行したとき、”TypeError: ‘list’ object is not callable”というエラーが発生することがあります。

my_list = [1, 2, 3]
result = my_list(4)

このエラーは、リスト型のオブジェクトを関数として呼び出そうとしたために発生します。

リストはコレクションであり、関数ではないため、()を使って呼び出すことはできません。

対処法としては、リストに対して適切なメソッドや操作を行うように修正します。

例えば、要素を追加したい場合はappend()メソッドを使います。

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)

実行結果

[1, 2, 3, 4]

このように、エラーメッセージをよく読み、リストに対して適切な操作を行うことが大切です。

○リストの要素を抽出できないエラーの原因と対処法

リストから要素を抽出しようとしたとき、”IndexError: list index out of range”というエラーが発生することがあります。

my_list = [1, 2, 3]
print(my_list[3])

このエラーは、リストの範囲外のインデックスを指定したために発生します。

Pythonのリストのインデックスは0から始まるため、上記のコードではmy_list[3]が範囲外になっています。

対処法としては、リストの要素数を確認し、適切なインデックスを指定するように修正します。

my_list = [1, 2, 3]
print(my_list[2])  # インデックスを修正

実行結果

3

また、リストの長さを超えるインデックスを使わないように注意することが大切です。

リストの長さはlen()関数で取得できます。

my_list = [1, 2, 3]
print(len(my_list))  # リストの長さを確認

実行結果

3

リストの長さを確認し、適切なインデックスを使うようにすることで、このエラーを回避できます。

○リストの要素を置換できないエラーの原因と対処法

リストの要素を置換しようとしたとき、”TypeError: ‘str’ object does not support item assignment”というエラーが発生することがあります。

my_string = "Hello"
my_string[0] = "J"

このエラーは、文字列がイミュータブル(不変)であるために発生します。

Pythonの文字列は、一度作成されると変更できません。

対処法としては、文字列を新しく作成して置き換える方法があります。

リストに変換してから要素を置換し、再度文字列に戻すことができます。

my_string = "Hello"
my_list = list(my_string)
my_list[0] = "J"
new_string = "".join(my_list)
print(new_string)

実行結果

Jello

このように、文字列をリストに変換し、要素を置換した後、再度文字列に戻すことで、文字列の一部を置換できます。

●list関数の応用例

さて、ここまでlist関数の基本的な使い方やエラー対処法について解説してきましたが、実際の開発現場ではもっと応用的な使い方が求められることが多いですよね。

ここからは、list関数を活用したより実践的なコード例を見ていきましょう。

この例を通して、list関数の可能性を広げていってください。

○サンプルコード6:条件に一致する要素を抽出する

リストから特定の条件に一致する要素だけを抽出したいことがよくあります。

そんなときは、リスト内包表記を使うと簡潔に書くことができます。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)

実行結果

[2, 4, 6, 8, 10]

このコードでは、numbersリストから偶数だけを抽出して新しいリストeven_numbersを作成しています。

リスト内包表記の中で、if文を使って条件を指定することで、条件に一致する要素だけを選択的に抽出できます。

○サンプルコード7:リストのスライスを使った部分リストの取得

リストの一部分だけを取り出したい場合は、スライス機能を使うと便利です。

スライスを使えば、開始位置と終了位置を指定して部分リストを取得できます。

my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
slice1 = my_list[2:5]
print(slice1)

slice2 = my_list[:3]
print(slice2)

slice3 = my_list[4:]
print(slice3)

実行結果

['c', 'd', 'e']
['a', 'b', 'c']
['e', 'f', 'g']

slice1は、インデックス2から4までの要素を取得しています。

スライスの範囲は、開始位置から終了位置の手前までの要素が含まれます。

slice2は、開始位置を省略し、インデックス0から2までの要素を取得しています。

slice3は、終了位置を省略し、インデックス4から最後までの要素を取得しています。

このように、スライスを使うことで、リストの一部分を簡単に取り出すことができます。

○サンプルコード8:2次元リストから特定の列を抽出する

2次元リストから特定の列だけを取り出したいときは、リスト内包表記とインデックスを組み合わせると便利です。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

column1 = [row[0] for row in matrix]
print(column1)

column3 = [row[2] for row in matrix]
print(column3)

実行結果

[1, 4, 7]
[3, 6, 9]

このコードでは、3行3列の2次元リストmatrixから、1列目と3列目の要素を抽出しています。

リスト内包表記の中で、rowをmatrixから順番に取り出し、row[0]で各行の1列目の要素、row[2]で各行の3列目の要素を選択しています。

○サンプルコード9:リストのネスト構造を平坦化する

リストの中にリストが入れ子になっている場合、それを平坦化して1次元のリストにしたいことがあります。

そんなときは、再帰関数を使うと簡単に実現できます。

def flatten(nested_list):
    flat_list = []
    for element in nested_list:
        if type(element) == list:
            flat_list.extend(flatten(element))
        else:
            flat_list.append(element)
    return flat_list

nested_list = [1, [2, 3], [4, [5, 6], 7], 8]
flat_list = flatten(nested_list)
print(flat_list)

実行結果

[1, 2, 3, 4, 5, 6, 7, 8]

このコードでは、flatten()関数を再帰的に呼び出すことで、ネストされたリストを平坦化しています。

要素がリストの場合は、flatten()関数を再帰的に呼び出して平坦化し、結果をflat_listに追加します。

要素がリストでない場合は、そのままflat_listに追加します。

最終的に、nested_listのネスト構造が完全に平坦化され、1次元のリストflat_listが得られます。

まとめ

この記事では、Pythonのlist関数について、基本的な使い方から応用例まで幅広く解説してきました。

この記事で学んだ知識を活かして、ぜひ自分でもプログラミングに挑戦してみてください。

最初は小さなプログラムから始めて、徐々に規模を大きくしていくと良いと思います。