python setの応用

2703 ワード

You are given two sorted arrays that contain only integers. Your task is to find a way to merge them into a single one, sorted inascending order. Complete the function  mergeArrays(arr1, arr2) , where  arr1  and  arr2  are the original sorted arrays.
You don't need to worry about validation, since  arr1  and  arr2 must be arrays with 0 or more Integers. If both  arr1  and  arr2  are empty, then just return an empty array.
Note:  arr1  and  arr2  may be sorted in different orders. Also arr1  and  arr2  may have same integers. Remove duplicated in the returned result.
Examples
arr1 = [1, 2, 3, 4, 5];
arr2 = [6, 7, 8, 9, 10];
mergeArrays(arr1, arr2);  // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

arr3 = [1, 3, 5, 7, 9];
arr4 = [10, 8, 6, 4, 2];
mergeArrays(arr3, arr4);  // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

arr5 = [1, 3, 5, 7, 9, 11, 12];
arr6 = [1, 2, 3, 4, 5, 10, 12];
mergeArrays(arr5, arr6);  // [1, 2, 3, 4, 5, 7, 9, 10, 11, 12]

 
この問題はlist.extend()は2つのlistを接続し、それから重くして、最後にlist.sort();ただしpython自体には組み込み関数set()があります.pythonでは、setは基本的なデータ型であり、可変集合set()と可変集合frozenset()の2種類を含む.set()集合は無秩序であり(スライスは使用できない)、重複しない.
コレクションの作成
>>> set('boy')
set(['y', 'b', 'o'])
>>> set('boyboyboy')
set(['y', 'b', 'o'])

要素の追加、add-全体の追加、update-分割の追加、効果の上で違いがあります
>>> s=set('girl')
>>> s
set(['i', 'r', 'l', 'g'])
>>> s.add('boy')
>>> s
set(['i', 'boy', 'r', 'l', 'g'])
>>> s.update('man')
>>> s
set(['a', 'boy', 'g', 'i', 'm', 'l', 'n', 'r'])

要素の削除
>>> s=set('boy')
>>> s
set(['y', 'b', 'o'])
>>> s.remove('o')
>>> s
set(['y', 'b'])

集合の操作記号
数学記号
pythonオペレータ
意味
-
-
差分、相対補完

&
交差

|
へいれつ

in
メンバー関係

not in
メンバー関係ではありません
に等しい
==
に等しい
等しくない
!=
等しくない
だから集合の思想に従って、本文の冒頭の問題はこのように解決することができます
def func(arr1,arr2):
    return sorted(set(arr1)|set(arr2))

あるいは直接集合の互いに異性に従って、set()関数自体が返すのは1つの集合で、そのため自身は重み付けする機能があって、
def func(arr1,arr2):
    return sorted(set(arr1+arr2))