Python面接問題整理[クイックソート、copy、deep copy]


アルゴリズム#アルゴリズム#
  • クイックソート
  • #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # author: Yang hengyu
    # date: 2018-07-31
    
    
    def quick_sort(list_in):
        if not isinstance(list_in, list):
            return u'    '
        if len(list_in) <= 1:
            return list_in
    
        list_a = []
        list_b = []
        #     
        mark_num = list_in.pop()
    
        for num in list_in:
            if num < mark_num:
                list_a.append(num)
            else:
                list_b.append(num)
    
        return quick_sort(list_a) + [mark_num] + quick_sort(list_b)
    
    if __name__ == '__main__':
        a = [3, 45, 5, 3, 2, 8, 9, 52, 5]
        print quick_sort(a)

    きそ
  • copyとdeepcopyの違い
  • #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # author: Yang hengyu
    # date: 2018-07-31
    
    import copy
    
    a = [1, 2, 3]
    b = [1, 2, [1, 2, 3]]
    
    aa = copy.copy(a)
    bb = copy.copy(b)
    deep_aa = copy.deepcopy(a)
    deep_bb = copy.deepcopy(b)
    
    a[0] = '1'
    b[2][0] = '2'
    
    print aa, bb
    print deep_aa, deep_bb
    
    #     :
    [1, 2, 3] [1, 2, ['2', 2, 3]]
    [1, 2, 3] [1, 2, [1, 2, 3]]

    copyは1層しかコピーできません.deepcopyは各レイヤ(ネスト)をコピーします.このときdeepcopyから出てくるオブジェクトは元のオブジェクトではありません.実際には可変のサブオブジェクトを共有しますが、相互独立性には影響しません.最外層オブジェクトが可変タイプの場合、copy後に得られるオブジェクトは新しいメモリ空間を指し、最外層オブジェクトが可変タイプの場合、copy後に得られるオブジェクトは元のオブジェクトのメモリ空間を指す.付与:オブジェクトの参照を簡単にコピーし、2つのオブジェクトのidが同じです.