2018.05.26 追記: ソースコードのコメント中にある〝Python〟の綴りに誤りがあるとのご指摘を頂いたので訂正しました。
Pythonか…。
— たーせる (@tercel_s) 2011年2月7日
というわけで、春の Python まつりやります。やりません。
pythonわかりませ〜〜〜んああ〜〜〜
— 名前を入力して下さい (@sn2562) 2016年3月1日
かく言う僕も、お仕事では C# か Java ばかり触っているせいで、ごくたまに Python を触ろうとすると構文をド忘れしていることが非常に多いものです。
「Pythonではどう書けばいいんだっけ?」という思い出し時間は人生の無駄だと気づいたので、自分用メモとして Java と Python の構文の対比を適当にまとめておくことにしました。
本日のメニューは以下の通りです。動作確認を行った処理系のバージョンは、それぞれ Java 1.8 / Python 3.6 です。
- JavaのリストとPythonのリスト
- JavaのStreamとPythonの内包表記
- Javaの連想配列(Map)とPythonの連想配列(辞書)
- Javaの集合(Set)とPythonの集合(set)
JavaのリストとPythonのリスト
要素数の取得
JavaはCollection#sizeメソッド
// Java List<String> members = new ArrayList<>(Arrays.asList("たかし", "斉藤さん")); System.out.println(members.size()); // => 2
Pythonはlen関数
# Python members = ["たかし", "斉藤さん"] print (len(members)) # => 2
要素の包含チェック
JavaはCollection#containsメソッド
// Java List<String> members = new ArrayList<>(Arrays.asList("たかし", "斉藤さん")); System.out.println(members.contains("たかし")); // => true
JavaのStreamとPythonの内包表記
0〜4の整数でリストを初期化する
JavaのStream
// Java List<Integer> numbers = IntStream.range(0, 5).boxed().collect(Collectors.toList()); System.out.println(numbers); // => [0, 1, 2, 3, 4]
Pythonの内包表記
# Python numbers = [num for num in range(0, 5)] print (numbers) # => [0, 1, 2, 3, 4]
1〜9の奇数値でリストを初期化する
JavaのStream
// Java List<Integer> numbers = IntStream.range(0, 10) .filter(n -> n % 2 != 0) .boxed() .collect(Collectors.toList()); System.out.println(numbers); // => [1, 3, 5, 7, 9]
Pythonの内包表記
# Python numbers = [num for num in range(0, 10) if num % 2 != 0] print (numbers) # => [1, 3, 5, 7, 9]
Javaの連想配列(Map)とPythonの連想配列(辞書)
Javaの集合(Set)とPythonの集合(set)
初期化構文
Javaその1 (リストから集合を作る例)
// Java Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c", "a")); System.out.println(set); // => [a, b, c]
Javaその2 (Streamから集合を作る例)
// Java Set<String> set = Stream.of("a", "b", "c", "a").collect(Collectors.toSet()); System.out.println(set); // => [a, b, c]
Pythonその1(リストから集合を作る例)
# Python mySet = set(["a", "b", "c", "a"]) print(mySet) #=> {'a', 'b', 'c'}
Pythonその2(専用の初期化構文を使用する例)
# Python mySet = {"a", "b", "c", "a"} print(mySet) #=> {'a', 'b', 'c'}
和集合
JavaはSet#addAllメソッド
// Java Set<String> a = new HashSet<>(Arrays.asList("0", "1", "2", "3", "4")); Set<String> b = new HashSet<>(Arrays.asList("0", "2", "4", "6", "8")); Set<String> union = new HashSet<>(a); union.addAll(b); System.out.println(union); // => [0, 1, 2, 3, 4, 6, 8]
積集合
JavaはSet#retainAllメソッド
// Java Set<String> a = new HashSet<>(Arrays.asList("0", "1", "2", "3", "4")); Set<String> b = new HashSet<>(Arrays.asList("0", "2", "4", "6", "8")); Set<String> intersection = new HashSet<>(a); intersection.retainAll(b); System.out.println(intersection); // => [0, 2, 4]
差集合
JavaはSet#removeAllメソッド
// Java Set<String> a = new HashSet<>(Arrays.asList("0", "1", "2", "3", "4")); Set<String> b = new HashSet<>(Arrays.asList("0", "2", "4", "6", "8")); Set<String> difference = new HashSet<>(a); difference.removeAll(b); System.out.println(difference); // => [1, 3]