1. 程式人生 > >面試題(1)

面試題(1)

1 . 列印結果為:

def Extend_List(val,a_list=[]):
    list.append(val)
    return list
list_1 = Extend_List(80)
list_2 = Extend_List(123,[])
list_3 = Extend_List('a')

print(list_1)
print(list_2)
print(list_3)

列印結果為:

[80,'a']
[123]
[80,'a']

2 . list去重:至少兩種方法

# -*- coding: utf-8 -*-
import itertools


def
function1(alist):
# 方法一:使用set去重,缺點:無法保持原序 return list(set(alist)) def function2(alist): # 方法二:使用itertools.groupby按分組顯示 alist.sort() blist = [] it = itertools.groupby(alist) for k, g in it: blist.append(k) return blist def function3(alist): # 方法三:使用新建列表去重,缺點:浪費記憶體
blist = [] for num in alist: if num not in blist: blist.append(num) return blist def function4(alist): # 方法四:使用for迴圈去重重複元素,通過列表的count()方法來對元素計數,刪除計數大於1的重複元素 for x in alist: while alist.count(x) > 1: del alist[alist.index(x)] return
alist def function5(alist): # 方法五:使用字典的fromkeys方法重複元素 alist = {}.fromkeys(alist).keys() return alist def main(): alist = [1, 2, 3, 43, 5, 3, 2, 3, 100, 100, 700, 100, 43, 2, 3, 1, 3, 100] print(function1(alist)) print(function2(alist)) print(function3(alist)) print(function4(alist)) print(function5(alist)) if __name__ == '__main__': main()

結果:

[1, 2, 3, 100, 5, 43, 700]
[1, 2, 3, 5, 43, 100, 700]
[1, 2, 3, 5, 43, 100, 700]
[1, 2, 3, 5, 43, 100, 700]
dict_keys([1, 2, 3, 5, 43, 100, 700])

3 . 怎樣拷貝一個物件

1.淺拷貝 :
    使用copy.copy,它可以進行物件的淺拷貝(shallow copy),它複製了物件,但對於物件中的元素,依然使用引用(換句話說修改拷貝物件元素,則被拷貝物件元素也被修改)

2.深拷貝 :
    使用copy.deepcopy,它可以進行深拷貝,不僅拷貝了物件,同時也拷貝了物件中的元素,獲得了全新的物件,與被拷貝物件完全獨立,但這需要犧牲一定的時間和空間。

3.特殊拷貝:
    如要複製列表L,使用list(L),要複製一個字典d,使用dict(d),要複製一個集合s,使用set(s)。

   總結一下的話:如果你要複製某個物件object, 它屬於python內建的型別type,那麼你可以使用type(object)來 獲得一個拷貝。
   對於不可變型別的物件如tuple,常數等,拷貝的始終是引用
import copy
list = [1, 2, 3, 4, ['a', 'b']]  #原始物件
b = list  #賦值,傳物件的引用,依然指向list
c = copy.copy(list)  #物件拷貝,淺拷貝(元素依然是共享的引用)
d = copy.deepcopy(list)  #物件拷貝,深拷貝
list.append(5)  #修改物件list
list[4].append('c')  #修改物件list中的['a', 'b']陣列物件

print 'list = ', list
print 'b = ', b
print 'c = ', c
print 'd = ', d
輸出結果:
list =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
d =  [1, 2, 3, 4, ['a', 'b']]

4 . 寫一個指定長度的斐波那契數列

def fibo(num):
    if num <= 0:
        return []
    elif num <= 1:
        return [1]
    else:
        list_fibo = [1, 1]
        for i in range(num - 2):
            list_fibo.append(list_fibo[i] + list_fibo[i+1])
        return list_fibo


if __name__ == '__main__':

    fibo_list = fibo(0)
    print(fibo_list)
    fibo_list = fibo(1)
    print(fibo_list)
    fibo_list = fibo(2)
    print(fibo_list)
    fibo_list = fibo(20)
    print(fibo_list)

結果:

[]
[1]
[1, 1]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

5 . 如何將str= “k1=1|k2=2|k3=3|k4=4”轉換成一個字典

str = "k1=1|k2=2|k3=3|k4=4"
dict = {}
for i in str.split('|'):
    dict[i.split('=')[0]] = int(i.split('=')[1])
print(dict)