コレクションの操作 | コレクションとデータ構造 | JavaプログラマのためのPython入門

スポンサーリンク
スポンサーリンク

コレクションの操作(ソート、フィルタリング、マッピング)

この記事では、Pythonにおけるコレクションの操作方法として、ソート、フィルタリング、マッピングについて解説します。Javaの知識を持つプログラマ向けに、Pythonでのこれらの操作がどのように簡潔に実行できるかを、Javaとの比較を交えて説明します。

コレクションのソート(Sorting)

Pythonでは、リストのソートは非常にシンプルに行えます。sort()メソッドやsorted()関数を使って、リストを昇順または降順に並べ替えることができます。

# Pythonのリストソートの例
numbers = [5, 2, 9, 1, 5, 6]

# 昇順にソート
numbers.sort()
print(numbers)  # [1, 2, 5, 5, 6, 9]

# 降順にソート
numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 5, 2, 1]

# sorted()関数を使ってソート
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # [1, 2, 5, 5, 6, 9]

sort()メソッドはリストを直接変更しますが、sorted()関数は元のリストを変更せず、新しいリストを返します。

Javaでのソート

Javaでは、Collections.sort()メソッドを使ってリストをソートします。また、ラムダ式やComparatorを使用してカスタムソートも可能です。

// Javaのリストソートの例
import java.util.*;

public class Main {
    public static void main(String[] args) {
        List numbers = Arrays.asList(5, 2, 9, 1, 5, 6);

        // 昇順にソート
        Collections.sort(numbers);
        System.out.println(numbers);  // [1, 2, 5, 5, 6, 9]

        // 降順にソート
        Collections.sort(numbers, Collections.reverseOrder());
        System.out.println(numbers);  // [9, 6, 5, 5, 2, 1]
    }
}

Javaでのソートは、Pythonに比べて少し冗長ですが、Comparatorを使ってカスタムソートが簡単にできます。

コレクションのフィルタリング(Filtering)

Pythonでは、filter()関数やリスト内包表記を使ってコレクションのフィルタリングを行います。

# Pythonのリストフィルタリングの例
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 偶数のみをフィルタリング
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers)  # [2, 4, 6, 8]

リスト内包表記を使うことで、シンプルにフィルタリングが行えます。また、filter()関数を使用する方法もありますが、内包表記が一般的です。

Javaでのフィルタリング

Javaでは、Stream APIを使ってリストのフィルタリングを行います。

// Javaのリストフィルタリングの例
import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        List numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

        // 偶数のみをフィルタリング
        List evenNumbers = numbers.stream()
                                           .filter(x -> x % 2 == 0)
                                           .collect(Collectors.toList());
        System.out.println(evenNumbers);  // [2, 4, 6, 8]
    }
}

Javaでは、Stream APIを使用してフィルタリングを行います。Pythonのリスト内包表記と比べてやや冗長ですが、強力な機能を提供します。

コレクションのマッピング(Mapping)

Pythonでは、map()関数やリスト内包表記を使ってコレクションの要素に対する変換を行います。

# Pythonのリストマッピングの例
numbers = [1, 2, 3, 4, 5]

# 各要素の2乗をリストにマッピング
squares = [x**2 for x in numbers]
print(squares)  # [1, 4, 9, 16, 25]

リスト内包表記を使うことで、各要素の変換を簡潔に行うことができます。map()関数も使用可能ですが、内包表記がより一般的です。

Javaでのマッピング

Javaでは、Stream APIを使ってリストの要素をマッピングします。

// Javaのリストマッピングの例
import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        List numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 各要素の2乗をリストにマッピング
        List squares = numbers.stream()
                                       .map(x -> x * x)
                                       .collect(Collectors.toList());
        System.out.println(squares);  // [1, 4, 9, 16, 25]
    }
}

Javaでは、Stream APIを使って要素の変換を行います。Pythonに比べてコードはやや長くなりますが、機能は同様です。

PythonとJavaのコレクション操作の比較

以下の表で、PythonとJavaのコレクション操作における主な違いを示します。

項目 Java Python
ソート Collections.sort()Stream API sort()sorted()
フィルタリング Stream API filter()、リスト内包表記
マッピング Stream API map()、リスト内包表記
コードの簡潔さ やや冗長 シンプルで直感的

ステップバイステップでコレクションを操作する方法

  1. コレクション(リスト、セットなど)を作成します。
  2. ソート、フィルタリング、マッピングを行いたい場合は、内包表記やStream APIを使用します。
  3. 生成されたコレクションを確認し、操作結果を利用します。

まとめ

この記事では、PythonとJavaのコレクション操作(ソート、フィルタリング、マッピング)について解説しました。Pythonでは、リスト内包表記やmap()filter()を使ってシンプルに操作ができ、Javaに比べてコードが短くなることが多いです。Javaでは、Stream APIを活用することで同様の操作が可能ですが、Pythonの内包表記に比べてやや冗長です。これらの操作を適切に使いこなして、効率的なデータ処理を実現しましょう。